agentv 5.2.0-next.1 → 5.3.1-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -20
- package/dist/{artifact-writer-SN6UNL5G.js → artifact-writer-7NBCOAYC.js} +4 -4
- package/dist/{chunk-3X357HS4.js → chunk-ASIGJIOJ.js} +107 -31
- package/dist/chunk-ASIGJIOJ.js.map +1 -0
- package/dist/{chunk-3S6A2RKR.js → chunk-ELCJ23K4.js} +18879 -17538
- package/dist/chunk-ELCJ23K4.js.map +1 -0
- package/dist/{chunk-T4AD3H3Y.js → chunk-LKGARI3W.js} +399 -32
- package/dist/chunk-LKGARI3W.js.map +1 -0
- package/dist/{chunk-ALVZQUZP.js → chunk-LXBI3SPX.js} +142 -14
- package/dist/chunk-LXBI3SPX.js.map +1 -0
- package/dist/{chunk-46K2OET3.js → chunk-RKE7SSET.js} +2 -2
- package/dist/cli.js +5 -5
- package/dist/dashboard/assets/{index-DNgf3qJ2.js → index-CbEMiJSb.js} +1 -1
- package/dist/dashboard/assets/{index-r_jSJmlw.js → index-DTA6-l7q.js} +3 -3
- package/dist/dashboard/index.html +1 -1
- package/dist/{dist-DEPJOMCA.js → dist-NMXMI5SK.js} +25 -5
- package/dist/index.js +5 -5
- package/dist/{interactive-36ZNMQB2.js → interactive-BN527UV3.js} +5 -5
- package/dist/skills/agentv-bench/SKILL.md +15 -14
- package/dist/skills/agentv-bench/agents/analyzer.md +2 -2
- package/dist/skills/agentv-bench/agents/comparator.md +3 -3
- package/dist/skills/agentv-bench/agents/executor.md +1 -1
- package/dist/skills/agentv-bench/agents/grader.md +4 -2
- package/dist/skills/agentv-bench/references/autoresearch.md +9 -9
- package/dist/skills/agentv-bench/references/description-optimization.md +5 -6
- package/dist/skills/agentv-bench/references/environment-adaptation.md +6 -6
- package/dist/skills/agentv-bench/references/eval-yaml-spec.md +50 -56
- package/dist/skills/agentv-bench/references/schemas.md +44 -60
- package/dist/skills/agentv-bench/references/subagent-pipeline.md +20 -18
- package/dist/skills/agentv-eval-migrations/SKILL.md +13 -0
- package/dist/skills/agentv-eval-migrations/references/breaking-changes.md +138 -22
- package/dist/skills/agentv-eval-writer/SKILL.md +103 -63
- package/dist/skills/agentv-eval-writer/references/custom-evaluators.md +10 -5
- package/dist/skills/agentv-eval-writer/references/eval.schema.json +749 -2158
- package/dist/skills/agentv-eval-writer/references/rubric-evaluator.md +1 -1
- package/dist/{ts-eval-loader-OMG2JBHP-OP5RR7A3.js → ts-eval-loader-2RFVZHCT-7CZ3DCDD.js} +8 -4
- package/package.json +1 -1
- package/dist/chunk-3S6A2RKR.js.map +0 -1
- package/dist/chunk-3X357HS4.js.map +0 -1
- package/dist/chunk-ALVZQUZP.js.map +0 -1
- package/dist/chunk-T4AD3H3Y.js.map +0 -1
- /package/dist/{artifact-writer-SN6UNL5G.js.map → artifact-writer-7NBCOAYC.js.map} +0 -0
- /package/dist/{chunk-46K2OET3.js.map → chunk-RKE7SSET.js.map} +0 -0
- /package/dist/{dist-DEPJOMCA.js.map → dist-NMXMI5SK.js.map} +0 -0
- /package/dist/{interactive-36ZNMQB2.js.map → interactive-BN527UV3.js.map} +0 -0
- /package/dist/{ts-eval-loader-OMG2JBHP-OP5RR7A3.js.map → ts-eval-loader-2RFVZHCT-7CZ3DCDD.js.map} +0 -0
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>AgentV</title>
|
|
7
|
-
<script type="module" crossorigin src="/assets/index-
|
|
7
|
+
<script type="module" crossorigin src="/assets/index-DTA6-l7q.js"></script>
|
|
8
8
|
<link rel="stylesheet" crossorigin href="/assets/index-D_bokML8.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body class="bg-gray-950 text-gray-100">
|
|
@@ -26,6 +26,7 @@ import {
|
|
|
26
26
|
getResultsRepoSyncStatus,
|
|
27
27
|
listGitRuns,
|
|
28
28
|
listGitRunsCached,
|
|
29
|
+
loadEnvPathFiles,
|
|
29
30
|
loadTsConfig,
|
|
30
31
|
materializeGitRun,
|
|
31
32
|
normalizeResultsConfig,
|
|
@@ -34,6 +35,8 @@ import {
|
|
|
34
35
|
parseCodexSession,
|
|
35
36
|
parseCopilotEvents,
|
|
36
37
|
parseEnvOutput,
|
|
38
|
+
parseJsonEnv,
|
|
39
|
+
parseShellExportsEnv,
|
|
37
40
|
prepareEvalWorkspace,
|
|
38
41
|
prepareResultsRepoBranch,
|
|
39
42
|
pushResultsRepoBranch,
|
|
@@ -44,6 +47,7 @@ import {
|
|
|
44
47
|
resolveResultsRepoRunsDir,
|
|
45
48
|
resolveResultsRepoUrl,
|
|
46
49
|
runBeforeSessionHook,
|
|
50
|
+
runEnvFromEntries,
|
|
47
51
|
setupWipWorktree,
|
|
48
52
|
stageResultsArtifacts,
|
|
49
53
|
syncProject,
|
|
@@ -54,7 +58,7 @@ import {
|
|
|
54
58
|
transpileEvalYaml,
|
|
55
59
|
transpileEvalYamlFile,
|
|
56
60
|
trimBaselineResult
|
|
57
|
-
} from "./chunk-
|
|
61
|
+
} from "./chunk-LXBI3SPX.js";
|
|
58
62
|
import {
|
|
59
63
|
AGENTV_CONFIG_FILE_NAME,
|
|
60
64
|
AGENTV_CONFIG_YML_FILE_NAME,
|
|
@@ -83,6 +87,7 @@ import {
|
|
|
83
87
|
ExternalTraceMetadataWireSchema,
|
|
84
88
|
FieldAccuracyGrader,
|
|
85
89
|
GraderRegistry,
|
|
90
|
+
LEGACY_METRICS_SCHEMA_VERSION,
|
|
86
91
|
LatencyGrader,
|
|
87
92
|
LlmGrader,
|
|
88
93
|
METRICS_JSON_MEDIA_TYPE,
|
|
@@ -106,6 +111,7 @@ import {
|
|
|
106
111
|
ResultRowSchemaError,
|
|
107
112
|
ScriptGrader,
|
|
108
113
|
SkillTriggerGrader,
|
|
114
|
+
SkillUsedGrader,
|
|
109
115
|
TEST_MESSAGE_ROLES,
|
|
110
116
|
TRACE_EVENT_TYPES,
|
|
111
117
|
TRACE_REDACTION_LEVELS,
|
|
@@ -145,6 +151,7 @@ import {
|
|
|
145
151
|
TraceSourceWireSchema,
|
|
146
152
|
TraceSummaryBoundarySchema,
|
|
147
153
|
TraceToolWireSchema,
|
|
154
|
+
TrajectoryGrader,
|
|
148
155
|
WorkspaceCreationError,
|
|
149
156
|
addProject,
|
|
150
157
|
aggregateRunDir,
|
|
@@ -216,7 +223,7 @@ import {
|
|
|
216
223
|
extractFailOnError,
|
|
217
224
|
extractImageBlocks,
|
|
218
225
|
extractJsonBlob,
|
|
219
|
-
|
|
226
|
+
extractLastAssistantContent2,
|
|
220
227
|
extractTargetFromSuite,
|
|
221
228
|
extractTargetRefsFromSuite,
|
|
222
229
|
extractTargetsFromSuite,
|
|
@@ -263,6 +270,7 @@ import {
|
|
|
263
270
|
isPlainConfigObject,
|
|
264
271
|
isTestMessage,
|
|
265
272
|
isTestMessageRole,
|
|
273
|
+
isTypeScriptEvalConfigFileName,
|
|
266
274
|
killAllTrackedChildren,
|
|
267
275
|
listTargetNames,
|
|
268
276
|
loadConfig,
|
|
@@ -282,6 +290,7 @@ import {
|
|
|
282
290
|
normalizeExperimentConfig,
|
|
283
291
|
normalizeExperimentRunOverride,
|
|
284
292
|
normalizeLineEndings,
|
|
293
|
+
normalizeMetricsArtifactWire,
|
|
285
294
|
normalizeRepoIdentity,
|
|
286
295
|
normalizeResultRow,
|
|
287
296
|
omitExternalTraceMetadataKeys,
|
|
@@ -369,11 +378,12 @@ import {
|
|
|
369
378
|
trackChild,
|
|
370
379
|
trackedChildCount,
|
|
371
380
|
transcriptReplayRecordToProviderResponse,
|
|
381
|
+
typeScriptEvalConfigGlob,
|
|
372
382
|
writeArtifacts,
|
|
373
383
|
writeArtifactsFromResults,
|
|
374
384
|
writeInitialRunSummaryArtifact,
|
|
375
385
|
writePerTestArtifacts
|
|
376
|
-
} from "./chunk-
|
|
386
|
+
} from "./chunk-ELCJ23K4.js";
|
|
377
387
|
import "./chunk-7BGERE6L.js";
|
|
378
388
|
import {
|
|
379
389
|
DockerWorkspaceProvider
|
|
@@ -409,6 +419,7 @@ export {
|
|
|
409
419
|
ExternalTraceMetadataWireSchema,
|
|
410
420
|
FieldAccuracyGrader,
|
|
411
421
|
GraderRegistry,
|
|
422
|
+
LEGACY_METRICS_SCHEMA_VERSION,
|
|
412
423
|
LatencyGrader,
|
|
413
424
|
LlmGrader,
|
|
414
425
|
METRICS_JSON_MEDIA_TYPE,
|
|
@@ -433,6 +444,7 @@ export {
|
|
|
433
444
|
RunBudgetTracker,
|
|
434
445
|
ScriptGrader,
|
|
435
446
|
SkillTriggerGrader,
|
|
447
|
+
SkillUsedGrader,
|
|
436
448
|
TEST_MESSAGE_ROLES,
|
|
437
449
|
TRACE_EVENT_TYPES,
|
|
438
450
|
TRACE_REDACTION_LEVELS,
|
|
@@ -473,6 +485,7 @@ export {
|
|
|
473
485
|
TraceSourceWireSchema,
|
|
474
486
|
TraceSummaryBoundarySchema,
|
|
475
487
|
TraceToolWireSchema,
|
|
488
|
+
TrajectoryGrader,
|
|
476
489
|
TranscriptProvider,
|
|
477
490
|
WorkspaceCreationError,
|
|
478
491
|
addProject,
|
|
@@ -561,7 +574,7 @@ export {
|
|
|
561
574
|
extractFailOnError,
|
|
562
575
|
extractImageBlocks,
|
|
563
576
|
extractJsonBlob,
|
|
564
|
-
extractLastAssistantContent,
|
|
577
|
+
extractLastAssistantContent2 as extractLastAssistantContent,
|
|
565
578
|
extractTargetFromSuite,
|
|
566
579
|
extractTargetRefsFromSuite,
|
|
567
580
|
extractTargetsFromSuite,
|
|
@@ -613,11 +626,13 @@ export {
|
|
|
613
626
|
isPlainConfigObject,
|
|
614
627
|
isTestMessage,
|
|
615
628
|
isTestMessageRole,
|
|
629
|
+
isTypeScriptEvalConfigFileName,
|
|
616
630
|
killAllTrackedChildren,
|
|
617
631
|
listGitRuns,
|
|
618
632
|
listGitRunsCached,
|
|
619
633
|
listTargetNames,
|
|
620
634
|
loadConfig,
|
|
635
|
+
loadEnvPathFiles,
|
|
621
636
|
loadEvalCaseById,
|
|
622
637
|
loadEvalCases,
|
|
623
638
|
loadEvalSuite,
|
|
@@ -636,6 +651,7 @@ export {
|
|
|
636
651
|
normalizeExperimentConfig,
|
|
637
652
|
normalizeExperimentRunOverride,
|
|
638
653
|
normalizeLineEndings,
|
|
654
|
+
normalizeMetricsArtifactWire,
|
|
639
655
|
normalizeRepoIdentity,
|
|
640
656
|
normalizeResultRow,
|
|
641
657
|
normalizeResultsConfig,
|
|
@@ -646,9 +662,11 @@ export {
|
|
|
646
662
|
parseCopilotEvents,
|
|
647
663
|
parseEnvOutput,
|
|
648
664
|
parseEvaluationResultBoundary,
|
|
665
|
+
parseJsonEnv,
|
|
649
666
|
parseJsonFromText,
|
|
650
667
|
parseJsonSafe,
|
|
651
668
|
parseJsonlResults,
|
|
669
|
+
parseShellExportsEnv,
|
|
652
670
|
parseTraceBoundary,
|
|
653
671
|
parseTraceSummaryBoundary,
|
|
654
672
|
parseYamlValue,
|
|
@@ -687,6 +705,7 @@ export {
|
|
|
687
705
|
runContainsAnyAssertion,
|
|
688
706
|
runContainsAssertion,
|
|
689
707
|
runEndsWithAssertion,
|
|
708
|
+
runEnvFromEntries,
|
|
690
709
|
runEqualsAssertion,
|
|
691
710
|
runEvalCase,
|
|
692
711
|
runEvaluation,
|
|
@@ -749,9 +768,10 @@ export {
|
|
|
749
768
|
transpileEvalYaml,
|
|
750
769
|
transpileEvalYamlFile,
|
|
751
770
|
trimBaselineResult,
|
|
771
|
+
typeScriptEvalConfigGlob,
|
|
752
772
|
writeArtifacts,
|
|
753
773
|
writeArtifactsFromResults,
|
|
754
774
|
writeInitialRunSummaryArtifact,
|
|
755
775
|
writePerTestArtifacts
|
|
756
776
|
};
|
|
757
|
-
//# sourceMappingURL=dist-
|
|
777
|
+
//# sourceMappingURL=dist-NMXMI5SK.js.map
|
package/dist/index.js
CHANGED
|
@@ -6,11 +6,11 @@ import {
|
|
|
6
6
|
runCli,
|
|
7
7
|
shouldRunBeforeSessionHook,
|
|
8
8
|
usesDeprecatedStudioAlias
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-ASIGJIOJ.js";
|
|
10
|
+
import "./chunk-LKGARI3W.js";
|
|
11
|
+
import "./chunk-RKE7SSET.js";
|
|
12
|
+
import "./chunk-LXBI3SPX.js";
|
|
13
|
+
import "./chunk-ELCJ23K4.js";
|
|
14
14
|
import "./chunk-7BGERE6L.js";
|
|
15
15
|
import "./chunk-PEUTJS7B.js";
|
|
16
16
|
import "./chunk-M7BUKBAF.js";
|
|
@@ -8,14 +8,14 @@ import {
|
|
|
8
8
|
getCategories,
|
|
9
9
|
resolveExistingRunPrimaryPath,
|
|
10
10
|
runEvalCommand
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-LKGARI3W.js";
|
|
12
|
+
import "./chunk-RKE7SSET.js";
|
|
13
|
+
import "./chunk-LXBI3SPX.js";
|
|
14
14
|
import {
|
|
15
15
|
getAgentvConfigDir,
|
|
16
16
|
listTargetNames,
|
|
17
17
|
readTargetDefinitions
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-ELCJ23K4.js";
|
|
19
19
|
import "./chunk-7BGERE6L.js";
|
|
20
20
|
import "./chunk-PEUTJS7B.js";
|
|
21
21
|
import "./chunk-M7BUKBAF.js";
|
|
@@ -344,4 +344,4 @@ ${ANSI_DIM}Retrying execution errors...${ANSI_RESET}
|
|
|
344
344
|
export {
|
|
345
345
|
launchInteractiveWizard
|
|
346
346
|
};
|
|
347
|
-
//# sourceMappingURL=interactive-
|
|
347
|
+
//# sourceMappingURL=interactive-BN527UV3.js.map
|
|
@@ -49,7 +49,7 @@ Before running or optimizing, understand what you're working with.
|
|
|
49
49
|
|
|
50
50
|
2. **Identify success criteria** — what does "good" look like for this agent? What are the edge cases? What would a failure look like? Talk to the user if this isn't clear from the artifacts alone.
|
|
51
51
|
|
|
52
|
-
3. **Understand the target harness** — which provider runs the agent (Claude, GPT, Copilot CLI, Gemini, custom CLI)? This affects what grader types are available and how to run tests. Targets are configured in `.agentv/targets.yaml` (canonical location, searched from the eval file directory upward). Sensitive values like `api_key` must use
|
|
52
|
+
3. **Understand the target harness** — which provider runs the agent (Claude, GPT, Copilot CLI, Gemini, custom CLI)? This affects what grader types are available and how to run tests. Targets are configured in `.agentv/targets.yaml` (canonical location, searched from the eval file directory upward). Sensitive values like `api_key` must use `{{ env.ENV_VAR }}` references — literal secrets are rejected as a security guardrail.
|
|
53
53
|
|
|
54
54
|
4. **Challenge assumptions** — if evals already exist, review their quality before running:
|
|
55
55
|
- Are the test cases testing the right things?
|
|
@@ -65,7 +65,7 @@ Before running or optimizing, understand what you're working with.
|
|
|
65
65
|
|
|
66
66
|
AgentV supports two evaluation formats:
|
|
67
67
|
|
|
68
|
-
**EVAL.yaml** (native, full features) — supports environment recipes, script graders, multi-turn conversations, tool trajectory scoring, workspace file tracking, and multi-provider targets. Use this for agent evaluation.
|
|
68
|
+
**EVAL.yaml** (native, full features) — supports prompt matrices, environment recipes, script graders, multi-turn conversations, tool trajectory scoring, workspace file tracking, and multi-provider targets. Use this for agent evaluation.
|
|
69
69
|
|
|
70
70
|
```yaml
|
|
71
71
|
# example.eval.yaml
|
|
@@ -89,7 +89,7 @@ tests:
|
|
|
89
89
|
- Review identifies the null pointer bug and suggests a concrete fix
|
|
90
90
|
```
|
|
91
91
|
|
|
92
|
-
Multi-skill evaluation is handled naturally via
|
|
92
|
+
Multi-skill evaluation is handled naturally via prompt messages — describe the task in `prompts`, put row-specific data in `tests[].vars`, and the agent uses whatever skills it needs.
|
|
93
93
|
|
|
94
94
|
**evals.json** (skill-creator compatible) — auto-promoted to EVAL-equivalent format:
|
|
95
95
|
- `prompt` → input messages
|
|
@@ -117,7 +117,7 @@ Start with 2-3 realistic test cases — the kind of thing a real user would actu
|
|
|
117
117
|
|
|
118
118
|
Good assertions are objectively verifiable and have descriptive names. Subjective quality ("the output is good") is better evaluated qualitatively — don't force assertions onto things that need human judgment.
|
|
119
119
|
|
|
120
|
-
**Grader types** (cheapest to most expensive): `exact`, `contains`, `regex`, `is-json`, `field-accuracy`, `assert-set`, `
|
|
120
|
+
**Grader types** (cheapest to most expensive): `exact`, `contains`, `regex`, `is-json`, `field-accuracy`, `assert-set`, `skill-used`, `not-skill-used`, `trajectory:*`, `script`, `llm-rubric`. See `references/eval-yaml-spec.md` for full config and grading recipes for each type.
|
|
121
121
|
|
|
122
122
|
Prefer deterministic graders over LLM graders whenever possible. If an assertion can be checked with `contains` or `regex`, don't use `llm-rubric`.
|
|
123
123
|
|
|
@@ -127,7 +127,7 @@ Prefer deterministic graders over LLM graders whenever possible. If an assertion
|
|
|
127
127
|
|
|
128
128
|
This section is one continuous sequence — don't stop partway through.
|
|
129
129
|
|
|
130
|
-
Each run produces a new `.agentv/results
|
|
130
|
+
Each run produces a new canonical `.agentv/results/<run_id>/` directory automatically. Use the printed run id and `.internal/index.jsonl` when comparing runs.
|
|
131
131
|
|
|
132
132
|
### Choosing a run mode
|
|
133
133
|
|
|
@@ -228,11 +228,11 @@ Each grader subagent (operating under `agents/grader.md` instructions):
|
|
|
228
228
|
2. Reads `<test-id>/response.md` for the candidate output
|
|
229
229
|
3. Grades the response against the prompt criteria
|
|
230
230
|
4. **Writes its result to disk**: `<run-dir>/<evalset>/<test-id>/llm_grader_results/<name>.json`
|
|
231
|
-
5. Returns score (0.0–1.0) and per-assertion
|
|
231
|
+
5. Returns score (0.0–1.0) and per-assertion notes to the orchestrator
|
|
232
232
|
|
|
233
|
-
**Writing to disk is critical.**
|
|
233
|
+
**Writing to disk is critical.** Intermediate assertion arrays are lost if accumulated only in the orchestrator's context across multiple batches (context summarization drops detail). Writing per-test results to `llm_grader_results/<name>.json` makes grading resumable. Public `grading.json` artifacts normalize these details into recursive `component_results`.
|
|
234
234
|
|
|
235
|
-
The result file format is:
|
|
235
|
+
The intermediate subagent result file format is:
|
|
236
236
|
```json
|
|
237
237
|
{ "score": 0.85, "assertions": [{"text": "...", "passed": true, "evidence": "..."}] }
|
|
238
238
|
```
|
|
@@ -246,18 +246,19 @@ agentv pipeline bench <run-dir>
|
|
|
246
246
|
agentv results validate <run-dir>
|
|
247
247
|
```
|
|
248
248
|
|
|
249
|
-
`pipeline bench` reads LLM grader results from `llm_grader_results/<name>.json` per test automatically, merges with script-grader scores, computes
|
|
249
|
+
`pipeline bench` reads LLM grader results from `llm_grader_results/<name>.json` per test automatically, merges with script-grader scores, computes aggregate scores, and writes the canonical run bundle with `.internal/index.jsonl`, `summary.json`, and per-attempt `grading.json`.
|
|
250
250
|
|
|
251
251
|
> **Diagnosing `pass_rate=0`:** If `pipeline bench` reports `pass_rate=0` across the board, do **not** assume the tests genuinely failed. First verify the grading pipeline ran correctly: check that `<test-id>/llm_grader_results/<name>.json` exists and is non-empty for each test. If these files are absent or empty, the grader subagents failed to produce output (most common cause: `agents/grader.md` was not embedded in the subagent prompts — see Phase 2). Treat `pass_rate=0` as a real signal only after confirming grader results exist.
|
|
252
252
|
|
|
253
253
|
### Artifacts
|
|
254
254
|
|
|
255
255
|
All artifacts use established schemas — see `references/schemas.md` for the full definitions. Do not modify the structure. Key artifacts per run:
|
|
256
|
-
-
|
|
257
|
-
- **
|
|
258
|
-
- **
|
|
256
|
+
- **.internal/index.jsonl**: canonical row index for compare, Dashboard, rerun, and artifact discovery
|
|
257
|
+
- **grading.json**: aggregate `pass`, `score`, `reason`, recursive `component_results`, and optional `assertion`, `named_scores`, and `metadata`
|
|
258
|
+
- **metrics.json**: token, cost, timing, tool, and transcript metrics for the attempt
|
|
259
|
+
- **summary.json**: run-level aggregate metadata and pass/score rollups
|
|
259
260
|
|
|
260
|
-
Write artifacts to `.agentv/
|
|
261
|
+
Write artifacts to `.agentv/results/<run_id>/` through the CLI unless a task explicitly needs a fixed output path.
|
|
261
262
|
|
|
262
263
|
### Environment features (EVAL.yaml only)
|
|
263
264
|
|
|
@@ -350,7 +351,7 @@ If a prompt file is referenced in both task input and grader configs, optimize f
|
|
|
350
351
|
After improving:
|
|
351
352
|
|
|
352
353
|
1. Apply your changes to the agent's prompts/skills/config
|
|
353
|
-
2. Re-run all test cases (agentv creates a new `.agentv/results
|
|
354
|
+
2. Re-run all test cases (agentv creates a new `.agentv/results/<run_id>/` directory automatically)
|
|
354
355
|
3. Compare against the previous iteration (Step 4). If running in automated mode, use the **automated keep/discard** logic below instead of manual judgment — it will decide whether to keep or revert the change for you.
|
|
355
356
|
4. Present results to the user (or log the decision if running automated keep/discard)
|
|
356
357
|
5. Stop when ANY of:
|
|
@@ -22,7 +22,7 @@ You are an eval-quality analyst for AgentV. Your job is to read JSONL evaluation
|
|
|
22
22
|
|
|
23
23
|
Read every line of the JSONL results file. Each line is a JSON object with:
|
|
24
24
|
- `test_id`, `suite`, `score`, `assertions`, `reasoning`, `target`
|
|
25
|
-
- `scores` (optional): Array of per-grader breakdowns with `name`, `type`, `score`, `weight`, `
|
|
25
|
+
- `scores` (optional): Array of per-grader breakdowns with `name`, `type`, `score`, `weight`, `pass`, `assertions`, `reasoning`
|
|
26
26
|
|
|
27
27
|
If `eval-path` is provided, also read the EVAL.yaml to understand grader configurations.
|
|
28
28
|
|
|
@@ -123,7 +123,7 @@ If a section has no findings, include the header with "None found." underneath.
|
|
|
123
123
|
- **Be specific:** Every suggestion must include the test case ID, grader name, evidence from the results, and a concrete replacement config.
|
|
124
124
|
- **Be conservative:** Only suggest deterministic upgrades when the pattern is clear and consistent. Partial or ambiguous evidence should be noted but not acted on.
|
|
125
125
|
- **Prioritize by impact:** Order suggestions by estimated cost savings (`llm-rubric` → deterministic saves the most).
|
|
126
|
-
- **Handle all grader types:** Process `script`, `
|
|
126
|
+
- **Handle all grader types:** Process `script`, `trajectory:*`, `skill-used`, `not-skill-used`, `llm-rubric`, `rubrics`, `assert-set`, and all deterministic types. Only LLM-based types are candidates for deterministic upgrades.
|
|
127
127
|
- **Multi-provider awareness:** When results span multiple targets, note if a suggestion applies to all targets or is target-specific.
|
|
128
128
|
- **No false positives:** It is better to miss a suggestion than to recommend an incorrect upgrade. If unsure, add the finding to a "Needs Review" subsection with your reasoning.
|
|
129
129
|
|
|
@@ -24,7 +24,7 @@ You are the Blind Comparator for AgentV's evaluation workflow. Your job is to co
|
|
|
24
24
|
You will receive:
|
|
25
25
|
- `outputs`: Array of evaluation outputs to compare. Each contains:
|
|
26
26
|
- `target_id`: The provider/configuration identifier (DO NOT read this during scoring)
|
|
27
|
-
- `evaluator_results`: Array of grader scores and details (script,
|
|
27
|
+
- `evaluator_results`: Array of grader scores and details (script, trajectory, skill-use, llm-rubric, deterministic)
|
|
28
28
|
- `workspace_changes`: File changes made during workspace evaluation (if applicable)
|
|
29
29
|
- `tool_calls`: Tool invocations and results from multi-turn conversations (if applicable)
|
|
30
30
|
- `conversation`: Full multi-turn conversation history (if applicable)
|
|
@@ -91,7 +91,7 @@ For each content criterion, define:
|
|
|
91
91
|
**Grader-Specific Scoring** — when grader results are present:
|
|
92
92
|
|
|
93
93
|
- **script-grader**: Factor in pass/fail results, test coverage, assertion hit rates
|
|
94
|
-
- **
|
|
94
|
+
- **trajectory assertions**: Factor in tool call accuracy, sequence correctness, unnecessary tool calls
|
|
95
95
|
- **llm-rubric**: Factor in existing LLM grader scores as a reference signal (not as ground truth)
|
|
96
96
|
- **deterministic**: Factor in exact match / keyword hit rates
|
|
97
97
|
|
|
@@ -235,7 +235,7 @@ Also produce a human-readable markdown summary:
|
|
|
235
235
|
- **Be evidence-based**: Every score must cite specific evidence from the output.
|
|
236
236
|
- **Evaluate substance over style**: Correct, complete answers with rough formatting score higher than polished but incorrect answers.
|
|
237
237
|
- **Handle missing data gracefully**: If an output lacks workspace changes or tool calls but others have them, score what is present — do not penalize for data the target wasn't expected to produce.
|
|
238
|
-
- **Respect grader signals**: When script-grader or
|
|
238
|
+
- **Respect grader signals**: When script-grader or trajectory assertion results exist, they represent objective ground truth. Weight these heavily.
|
|
239
239
|
|
|
240
240
|
## Edge Cases
|
|
241
241
|
|
|
@@ -14,7 +14,7 @@ You are the executor for an AgentV evaluation test case. Your job is to **perfor
|
|
|
14
14
|
You are the target agent being evaluated. Do the task to the best of your ability — your output will be graded by a separate grader agent.
|
|
15
15
|
|
|
16
16
|
**You will receive these parameters:**
|
|
17
|
-
- `test-dir`: Path to the test case directory (
|
|
17
|
+
- `test-dir`: Path to the prepared test case directory inside the run bundle (for example `.agentv/results/<run_id>/<result-dir>/`)
|
|
18
18
|
|
|
19
19
|
## Process
|
|
20
20
|
|
|
@@ -80,8 +80,10 @@ For LLM-graded types: be rigorous and fair. Score based on substance, not exact
|
|
|
80
80
|
|
|
81
81
|
| Type | How to evaluate |
|
|
82
82
|
|------|----------------|
|
|
83
|
-
| `tool-
|
|
84
|
-
| `
|
|
83
|
+
| `trajectory:tool-used` | Inspect transcript for tool presence and minimum call counts |
|
|
84
|
+
| `trajectory:tool-sequence` | Inspect transcript for expected tool call order |
|
|
85
|
+
| `trajectory:tool-args-match` | Inspect transcript for expected tool arguments |
|
|
86
|
+
| `skill-used` / `not-skill-used` | Check whether the named skill was invoked in tool calls |
|
|
85
87
|
|
|
86
88
|
If transcript data is not available for tool inspection assertions, record `score: null` with a note that transcript data was not captured. Exclude from the weighted average.
|
|
87
89
|
|
|
@@ -56,14 +56,14 @@ Before proceeding to the next iteration, log the decision and rationale so the u
|
|
|
56
56
|
Iteration 2: KEEP
|
|
57
57
|
wins=3, losses=1, ties=6, meanDelta=+0.05
|
|
58
58
|
Rationale: candidate wins outweigh losses (3 > 1)
|
|
59
|
-
Baseline promoted: .agentv/results/
|
|
59
|
+
Baseline promoted: .agentv/results/2025-01-01T12-00-00-000Z/.internal/index.jsonl
|
|
60
60
|
```
|
|
61
61
|
|
|
62
62
|
```
|
|
63
63
|
Iteration 3: DISCARD
|
|
64
64
|
wins=1, losses=2, ties=7, meanDelta=-0.03
|
|
65
65
|
Rationale: candidate losses outweigh wins (2 > 1)
|
|
66
|
-
Reverted to baseline: .agentv/results/
|
|
66
|
+
Reverted to baseline: .agentv/results/2025-01-01T11-00-00-000Z/.internal/index.jsonl
|
|
67
67
|
Next: try a different mutation
|
|
68
68
|
```
|
|
69
69
|
|
|
@@ -210,20 +210,20 @@ agentv eval <eval-path> --experiment autoresearch-<name>
|
|
|
210
210
|
|
|
211
211
|
**b. Extract scores (bash only — do NOT read result files into your context)**
|
|
212
212
|
|
|
213
|
-
Find the latest
|
|
213
|
+
Find the latest run directory. Use bash/jq to extract small structured values:
|
|
214
214
|
|
|
215
215
|
```bash
|
|
216
216
|
# Find latest run dir
|
|
217
|
-
RUN_DIR=$(ls -td
|
|
217
|
+
RUN_DIR=$(ls -td .agentv/results/20*/ | head -1)
|
|
218
218
|
|
|
219
219
|
# Overall score (mean of all scores in index.jsonl)
|
|
220
|
-
SCORE=$(jq -sr '[.[].
|
|
220
|
+
SCORE=$(jq -sr '[.[].score] | add / length' "$RUN_DIR/.internal/index.jsonl")
|
|
221
221
|
|
|
222
|
-
# Per-
|
|
223
|
-
|
|
222
|
+
# Per-target mean scores as JSON object
|
|
223
|
+
TARGET_SCORES=$(jq -sr 'group_by(.target) | map({key: .[0].target, value: (map(.score) | add / length)}) | from_entries' "$RUN_DIR/.internal/index.jsonl")
|
|
224
224
|
|
|
225
|
-
# Cost (if
|
|
226
|
-
COST=$(jq -r '.cost_usd // 0' "$RUN_DIR/
|
|
225
|
+
# Cost (if present in summary.json)
|
|
226
|
+
COST=$(jq -r '.cost_usd // .total_cost_usd // 0' "$RUN_DIR/summary.json" 2>/dev/null || echo 0)
|
|
227
227
|
```
|
|
228
228
|
|
|
229
229
|
Capture only these small outputs (`SCORE`, `PASS_RATES`, `COST`) — never read the full JSONL into context.
|
|
@@ -6,7 +6,7 @@ core workflow step.
|
|
|
6
6
|
|
|
7
7
|
**Provider compatibility**: Description optimization applies to any agent platform with
|
|
8
8
|
skill-discovery mechanisms — Claude Code, Codex (`.agents/` or `.codex/` folders), Copilot,
|
|
9
|
-
and others. The `skill-
|
|
9
|
+
and others. The `skill-used` and `not-skill-used` graders check whether the agent invoked the right skill,
|
|
10
10
|
regardless of how discovery works on that platform.
|
|
11
11
|
|
|
12
12
|
## Step 1: Generate Trigger EVAL.yaml
|
|
@@ -36,14 +36,13 @@ tests:
|
|
|
36
36
|
- id: should-trigger-casual-optimize
|
|
37
37
|
input: "ok so I have this agent that keeps failing on the code review tasks, can you help me figure out why and fix it"
|
|
38
38
|
assert:
|
|
39
|
-
- type: skill-
|
|
40
|
-
|
|
39
|
+
- type: skill-used
|
|
40
|
+
value: agentv-bench
|
|
41
41
|
- id: should-not-trigger-build-error
|
|
42
42
|
input: "my TypeScript build is failing with type errors in src/auth.ts"
|
|
43
43
|
assert:
|
|
44
|
-
- type: skill-
|
|
45
|
-
|
|
46
|
-
should_trigger: false
|
|
44
|
+
- type: not-skill-used
|
|
45
|
+
value: agentv-bench
|
|
47
46
|
```
|
|
48
47
|
|
|
49
48
|
## Step 2: Review with User
|
|
@@ -21,14 +21,14 @@ for each test case, show the prompt and output. Ask for feedback inline. Skip be
|
|
|
21
21
|
- **Codex**: Supports skills via `.agents/` or `.codex/` folders. Emits `command_execution`
|
|
22
22
|
and `file_change` tool calls.
|
|
23
23
|
- **Custom CLI**: Needs `command` and output file pattern in target config
|
|
24
|
-
- **Target config**: Uses
|
|
24
|
+
- **Target config**: Uses `{{ env.ENV_VAR }}` references for API keys
|
|
25
25
|
|
|
26
26
|
**Note**: "Description Optimization" (see `references/description-optimization.md`) applies
|
|
27
27
|
to any platform with skill-discovery mechanisms. All listed providers support skills.
|
|
28
28
|
|
|
29
29
|
## Unsupported Providers: Use a Code-Grader
|
|
30
30
|
|
|
31
|
-
The built-in `skill-
|
|
31
|
+
The built-in `skill-used` and `not-skill-used` graders cover Claude, Copilot, Pi, Codex and VS Code out
|
|
32
32
|
of the box. For providers with different tool-call formats, write a script-grader that inspects
|
|
33
33
|
the agent's transcript messages or tool call trace.
|
|
34
34
|
|
|
@@ -37,17 +37,17 @@ transcript `messages`, and structured `trace`. Inspect `messages` or `trace.even
|
|
|
37
37
|
tool calls; reserve `output` for final-answer text checks.
|
|
38
38
|
|
|
39
39
|
```yaml
|
|
40
|
-
# Example: script-grader for Codex skill-
|
|
40
|
+
# Example: script-grader for Codex skill-use detection
|
|
41
41
|
tests:
|
|
42
|
-
- id:
|
|
42
|
+
- id: codex-skill-use
|
|
43
43
|
input: "Analyze this CSV file"
|
|
44
44
|
assert:
|
|
45
45
|
- type: script
|
|
46
|
-
command: [bun, run, ./judges/codex-skill-
|
|
46
|
+
command: [bun, run, ./judges/codex-skill-use.ts]
|
|
47
47
|
```
|
|
48
48
|
|
|
49
49
|
```typescript
|
|
50
|
-
// judges/codex-skill-
|
|
50
|
+
// judges/codex-skill-use.ts
|
|
51
51
|
import { defineScriptGrader } from '@agentv/sdk';
|
|
52
52
|
|
|
53
53
|
export default defineScriptGrader(({ messages }) => {
|