agentv 4.17.1 → 4.19.0-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/artifact-writer-YATMDPWI.js +41 -0
- package/dist/{chunk-ILIM6IIX.js → chunk-L7WOR7IR.js} +213 -176
- package/dist/chunk-L7WOR7IR.js.map +1 -0
- package/dist/chunk-NL6P5MUH.js +691 -0
- package/dist/chunk-NL6P5MUH.js.map +1 -0
- package/dist/{chunk-IRU2UOWN.js → chunk-PTYQS37Y.js} +29097 -31078
- package/dist/chunk-PTYQS37Y.js.map +1 -0
- package/dist/chunk-R2QDYORI.js +2178 -0
- package/dist/chunk-R2QDYORI.js.map +1 -0
- package/dist/{chunk-ZUNYOUFO.js → chunk-YGNBTBXW.js} +328 -656
- package/dist/chunk-YGNBTBXW.js.map +1 -0
- package/dist/cli.js +7 -5
- package/dist/cli.js.map +1 -1
- package/dist/{dist-U5EXNMON.js → dist-RTIUSC6L.js} +91 -90
- package/dist/dist-RTIUSC6L.js.map +1 -0
- package/dist/index.js +7 -5
- package/dist/{interactive-LFCOVXPQ.js → interactive-UZSFYMCF.js} +8 -6
- package/dist/{interactive-LFCOVXPQ.js.map → interactive-UZSFYMCF.js.map} +1 -1
- package/dist/studio/assets/{index-Bhv1TEO2.js → index-BTsTcivx.js} +1 -1
- package/dist/studio/assets/{index-vZYHIvCH.js → index-KfPHd-QM.js} +1 -1
- package/dist/studio/index.html +1 -1
- package/dist/ts-eval-loader-XFQ6S4DT-S7P2UUBX.js +15 -0
- package/dist/ts-eval-loader-XFQ6S4DT-S7P2UUBX.js.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-ILIM6IIX.js.map +0 -1
- package/dist/chunk-IRU2UOWN.js.map +0 -1
- package/dist/chunk-ZUNYOUFO.js.map +0 -1
- /package/dist/{dist-U5EXNMON.js.map → artifact-writer-YATMDPWI.js.map} +0 -0
package/dist/cli.js
CHANGED
|
@@ -2,15 +2,17 @@
|
|
|
2
2
|
import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
4
|
runCli
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-L7WOR7IR.js";
|
|
6
|
+
import "./chunk-YGNBTBXW.js";
|
|
7
|
+
import "./chunk-NL6P5MUH.js";
|
|
8
|
+
import "./chunk-R2QDYORI.js";
|
|
8
9
|
import "./chunk-QOBQ5XYF.js";
|
|
10
|
+
import "./chunk-BPGJ4HBU.js";
|
|
11
|
+
import "./chunk-PTYQS37Y.js";
|
|
12
|
+
import "./chunk-ZKO2LGRR.js";
|
|
9
13
|
import "./chunk-NPVGBFF6.js";
|
|
10
14
|
import "./chunk-HQDCIXVH.js";
|
|
11
15
|
import "./chunk-LRULMAAA.js";
|
|
12
|
-
import "./chunk-BPGJ4HBU.js";
|
|
13
|
-
import "./chunk-ZKO2LGRR.js";
|
|
14
16
|
import "./chunk-5H446C7X.js";
|
|
15
17
|
|
|
16
18
|
// src/cli.ts
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { runCli } from './index.js';\n\nrunCli()\n .then(() => {\n process.exit(0);\n })\n .catch((error) => {\n if (error instanceof Error) {\n console.error(`Error: ${error.message}`);\n if (process.env.DEBUG) {\n console.error(error.stack);\n }\n } else {\n console.error(error);\n }\n process.exit(1);\n });\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { runCli } from './index.js';\n\nrunCli()\n .then(() => {\n process.exit(0);\n })\n .catch((error) => {\n if (error instanceof Error) {\n console.error(`Error: ${error.message}`);\n if (process.env.DEBUG) {\n console.error(error.stack);\n }\n } else {\n console.error(error);\n }\n process.exit(1);\n });\n"],"mappings":";;;;;;;;;;;;;;;;;;AAGA,OAAO,EACJ,KAAK,MAAM;AACV,UAAQ,KAAK,CAAC;AAChB,CAAC,EACA,MAAM,CAAC,UAAU;AAChB,MAAI,iBAAiB,OAAO;AAC1B,YAAQ,MAAM,UAAU,MAAM,OAAO,EAAE;AACvC,QAAI,QAAQ,IAAI,OAAO;AACrB,cAAQ,MAAM,MAAM,KAAK;AAAA,IAC3B;AAAA,EACF,OAAO;AACL,YAAQ,MAAM,KAAK;AAAA,EACrB;AACA,UAAQ,KAAK,CAAC;AAChB,CAAC;","names":[]}
|
|
@@ -1,37 +1,87 @@
|
|
|
1
1
|
import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
|
-
COMMON_TARGET_SETTINGS,
|
|
4
|
-
CodeEvaluator,
|
|
5
|
-
CompositeEvaluator,
|
|
6
|
-
CostEvaluator,
|
|
7
3
|
DEFAULT_CATEGORY,
|
|
8
|
-
DEFAULT_EVALUATOR_TEMPLATE,
|
|
9
|
-
DEFAULT_EVAL_PATTERNS,
|
|
10
|
-
DEFAULT_EXPLORATION_TOOLS,
|
|
11
|
-
DEFAULT_THRESHOLD,
|
|
12
|
-
DeterministicAssertionEvaluator,
|
|
13
|
-
EvaluatorRegistry,
|
|
14
|
-
ExecutionMetricsEvaluator,
|
|
15
|
-
FieldAccuracyEvaluator,
|
|
16
|
-
LatencyEvaluator,
|
|
17
|
-
LlmGraderEvaluator,
|
|
18
4
|
OTEL_BACKEND_PRESETS,
|
|
19
5
|
OtelStreamingObserver,
|
|
20
6
|
OtelTraceExporter,
|
|
7
|
+
ResponseCache,
|
|
8
|
+
TranscriptProvider,
|
|
9
|
+
addBenchmark,
|
|
10
|
+
checkoutResultsRepoBranch,
|
|
11
|
+
commitAndPushResultsBranch,
|
|
12
|
+
createAgentKernel,
|
|
13
|
+
createDraftResultsPr,
|
|
14
|
+
defineConfig,
|
|
15
|
+
deriveBenchmarkId,
|
|
16
|
+
deriveCategory,
|
|
17
|
+
directorySizeBytes,
|
|
18
|
+
discoverBenchmarks,
|
|
19
|
+
discoverClaudeSessions,
|
|
20
|
+
discoverCodexSessions,
|
|
21
|
+
ensureResultsRepoClone,
|
|
22
|
+
generateRubrics,
|
|
23
|
+
getBenchmark,
|
|
24
|
+
getBenchmarksRegistryPath,
|
|
25
|
+
getOutputFilenames,
|
|
26
|
+
getResultsRepoCachePaths,
|
|
27
|
+
getResultsRepoStatus,
|
|
28
|
+
groupTranscriptJsonLines,
|
|
29
|
+
loadBenchmarkRegistry,
|
|
30
|
+
loadTsConfig,
|
|
31
|
+
normalizeResultsExportConfig,
|
|
32
|
+
parseClaudeSession,
|
|
33
|
+
parseCodexSession,
|
|
34
|
+
prepareResultsRepoBranch,
|
|
35
|
+
pushResultsRepoBranch,
|
|
36
|
+
readTranscriptFile,
|
|
37
|
+
readTranscriptJsonl,
|
|
38
|
+
removeBenchmark,
|
|
39
|
+
resolveResultsRepoRunsDir,
|
|
40
|
+
resolveResultsRepoUrl,
|
|
41
|
+
saveBenchmarkRegistry,
|
|
42
|
+
scanRepoDeps,
|
|
43
|
+
shouldEnableCache,
|
|
44
|
+
shouldSkipCacheForTemperature,
|
|
45
|
+
stageResultsArtifacts,
|
|
46
|
+
syncResultsRepo,
|
|
47
|
+
toTranscriptJsonLines,
|
|
48
|
+
touchBenchmark,
|
|
49
|
+
transpileEvalYaml,
|
|
50
|
+
transpileEvalYamlFile,
|
|
51
|
+
trimBaselineResult
|
|
52
|
+
} from "./chunk-R2QDYORI.js";
|
|
53
|
+
import {
|
|
54
|
+
OtlpJsonFileExporter
|
|
55
|
+
} from "./chunk-QOBQ5XYF.js";
|
|
56
|
+
import {
|
|
57
|
+
DockerWorkspaceProvider
|
|
58
|
+
} from "./chunk-BPGJ4HBU.js";
|
|
59
|
+
import {
|
|
60
|
+
COMMON_TARGET_SETTINGS,
|
|
61
|
+
CodeGrader,
|
|
62
|
+
CompositeGrader,
|
|
63
|
+
CostGrader,
|
|
64
|
+
DEFAULT_EVAL_PATTERNS,
|
|
65
|
+
DEFAULT_EXPLORATION_TOOLS,
|
|
66
|
+
DEFAULT_GRADER_TEMPLATE,
|
|
67
|
+
DEFAULT_THRESHOLD,
|
|
68
|
+
DeterministicAssertionGrader,
|
|
69
|
+
ExecutionMetricsGrader,
|
|
70
|
+
FieldAccuracyGrader,
|
|
71
|
+
GraderRegistry,
|
|
72
|
+
LatencyGrader,
|
|
73
|
+
LlmGrader,
|
|
21
74
|
PASS_THRESHOLD,
|
|
22
75
|
ProviderRegistry,
|
|
23
76
|
RepoManager,
|
|
24
|
-
|
|
25
|
-
SkillTriggerEvaluator,
|
|
77
|
+
SkillTriggerGrader,
|
|
26
78
|
TEST_MESSAGE_ROLES,
|
|
27
79
|
TemplateNotDirectoryError,
|
|
28
80
|
TemplateNotFoundError,
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
TranscriptProvider,
|
|
81
|
+
TokenUsageGrader,
|
|
82
|
+
ToolTrajectoryGrader,
|
|
32
83
|
WorkspaceCreationError,
|
|
33
84
|
WorkspacePoolManager,
|
|
34
|
-
addBenchmark,
|
|
35
85
|
assembleLlmGraderPrompt,
|
|
36
86
|
avgToolDurationMs,
|
|
37
87
|
buildDirectoryChain,
|
|
@@ -42,11 +92,9 @@ import {
|
|
|
42
92
|
buildSearchRoots,
|
|
43
93
|
calculateRubricScore,
|
|
44
94
|
captureFileChanges,
|
|
45
|
-
checkoutResultsRepoBranch,
|
|
46
95
|
clampScore,
|
|
47
96
|
cleanupEvalWorkspaces,
|
|
48
97
|
cleanupWorkspace,
|
|
49
|
-
commitAndPushResultsBranch,
|
|
50
98
|
computeTraceSummary,
|
|
51
99
|
computeWorkspaceFingerprint,
|
|
52
100
|
consumeClaudeLogEntries,
|
|
@@ -54,26 +102,16 @@ import {
|
|
|
54
102
|
consumeCopilotCliLogEntries,
|
|
55
103
|
consumeCopilotSdkLogEntries,
|
|
56
104
|
consumePiLogEntries,
|
|
57
|
-
createAgentKernel,
|
|
58
105
|
createBuiltinProviderRegistry,
|
|
59
106
|
createBuiltinRegistry,
|
|
60
|
-
createDraftResultsPr,
|
|
61
107
|
createProvider,
|
|
62
108
|
createTempWorkspace,
|
|
63
109
|
deepEqual,
|
|
64
|
-
defineConfig,
|
|
65
|
-
deriveBenchmarkId,
|
|
66
|
-
deriveCategory,
|
|
67
110
|
detectFormat,
|
|
68
|
-
directorySizeBytes,
|
|
69
111
|
discoverAssertions,
|
|
70
|
-
discoverBenchmarks,
|
|
71
|
-
discoverClaudeSessions,
|
|
72
|
-
discoverCodexSessions,
|
|
73
112
|
discoverCopilotSessions,
|
|
74
113
|
discoverGraders,
|
|
75
114
|
discoverProviders,
|
|
76
|
-
ensureResultsRepoClone,
|
|
77
115
|
ensureVSCodeSubagents,
|
|
78
116
|
evaluate,
|
|
79
117
|
executeScript,
|
|
@@ -94,33 +132,25 @@ import {
|
|
|
94
132
|
fileExists,
|
|
95
133
|
findGitRoot,
|
|
96
134
|
freeformEvaluationSchema,
|
|
97
|
-
generateRubrics,
|
|
98
135
|
getAgentvConfigDir,
|
|
99
136
|
getAgentvHome,
|
|
100
|
-
getBenchmark,
|
|
101
|
-
getBenchmarksRegistryPath,
|
|
102
|
-
getOutputFilenames,
|
|
103
|
-
getResultsRepoCachePaths,
|
|
104
|
-
getResultsRepoStatus,
|
|
105
137
|
getSubagentsRoot,
|
|
106
138
|
getTextContent,
|
|
107
139
|
getTraceStateRoot,
|
|
108
140
|
getWorkspacePath,
|
|
109
141
|
getWorkspacePoolRoot,
|
|
110
142
|
getWorkspacesRoot,
|
|
111
|
-
groupTranscriptJsonLines,
|
|
112
143
|
initializeBaseline,
|
|
113
144
|
isAgentSkillsFormat,
|
|
114
145
|
isContent,
|
|
115
146
|
isContentArray,
|
|
116
|
-
|
|
147
|
+
isGraderKind,
|
|
117
148
|
isJsonObject,
|
|
118
149
|
isJsonValue,
|
|
119
150
|
isNonEmptyString,
|
|
120
151
|
isTestMessage,
|
|
121
152
|
isTestMessageRole,
|
|
122
153
|
listTargetNames,
|
|
123
|
-
loadBenchmarkRegistry,
|
|
124
154
|
loadConfig,
|
|
125
155
|
loadEvalCaseById,
|
|
126
156
|
loadEvalCases,
|
|
@@ -128,31 +158,21 @@ import {
|
|
|
128
158
|
loadTestById,
|
|
129
159
|
loadTestSuite,
|
|
130
160
|
loadTests,
|
|
131
|
-
|
|
161
|
+
loadTsEvalFile,
|
|
132
162
|
mergeExecutionMetrics,
|
|
133
163
|
negateScore,
|
|
134
164
|
normalizeLineEndings,
|
|
135
|
-
normalizeResultsExportConfig,
|
|
136
165
|
parseAgentSkillsEvals,
|
|
137
|
-
parseClaudeSession,
|
|
138
|
-
parseCodexSession,
|
|
139
166
|
parseCopilotEvents,
|
|
140
167
|
parseJsonFromText,
|
|
141
168
|
parseJsonSafe,
|
|
142
|
-
prepareResultsRepoBranch,
|
|
143
|
-
pushResultsRepoBranch,
|
|
144
169
|
readJsonFile,
|
|
145
170
|
readTargetDefinitions,
|
|
146
171
|
readTestSuiteMetadata,
|
|
147
172
|
readTextFile,
|
|
148
|
-
readTranscriptFile,
|
|
149
|
-
readTranscriptJsonl,
|
|
150
|
-
removeBenchmark,
|
|
151
173
|
resolveAndCreateProvider,
|
|
152
174
|
resolveDelegatedTargetDefinition,
|
|
153
175
|
resolveFileReference,
|
|
154
|
-
resolveResultsRepoRunsDir,
|
|
155
|
-
resolveResultsRepoUrl,
|
|
156
176
|
resolveTargetDefinition,
|
|
157
177
|
resolveWorkspaceTemplate,
|
|
158
178
|
rubricEvaluationSchema,
|
|
@@ -169,57 +189,39 @@ import {
|
|
|
169
189
|
runIsJsonAssertion,
|
|
170
190
|
runRegexAssertion,
|
|
171
191
|
runStartsWithAssertion,
|
|
172
|
-
saveBenchmarkRegistry,
|
|
173
|
-
scanRepoDeps,
|
|
174
192
|
scoreToVerdict,
|
|
175
|
-
shouldEnableCache,
|
|
176
|
-
shouldSkipCacheForTemperature,
|
|
177
|
-
stageResultsArtifacts,
|
|
178
193
|
subscribeToClaudeLogEntries,
|
|
179
194
|
subscribeToCodexLogEntries,
|
|
180
195
|
subscribeToCopilotCliLogEntries,
|
|
181
196
|
subscribeToCopilotSdkLogEntries,
|
|
182
197
|
subscribeToPiLogEntries,
|
|
183
198
|
substituteVariables,
|
|
184
|
-
syncResultsRepo,
|
|
185
199
|
toCamelCaseDeep,
|
|
186
200
|
toSnakeCaseDeep,
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
transpileEvalYaml,
|
|
191
|
-
transpileEvalYamlFile,
|
|
192
|
-
trimBaselineResult
|
|
193
|
-
} from "./chunk-IRU2UOWN.js";
|
|
194
|
-
import {
|
|
195
|
-
OtlpJsonFileExporter
|
|
196
|
-
} from "./chunk-QOBQ5XYF.js";
|
|
201
|
+
tokensPerTool
|
|
202
|
+
} from "./chunk-PTYQS37Y.js";
|
|
203
|
+
import "./chunk-ZKO2LGRR.js";
|
|
197
204
|
import "./chunk-NPVGBFF6.js";
|
|
198
205
|
import "./chunk-HQDCIXVH.js";
|
|
199
206
|
import "./chunk-LRULMAAA.js";
|
|
200
|
-
import {
|
|
201
|
-
DockerWorkspaceProvider
|
|
202
|
-
} from "./chunk-BPGJ4HBU.js";
|
|
203
|
-
import "./chunk-ZKO2LGRR.js";
|
|
204
207
|
import "./chunk-5H446C7X.js";
|
|
205
208
|
export {
|
|
206
209
|
COMMON_TARGET_SETTINGS,
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
+
CodeGrader,
|
|
211
|
+
CompositeGrader,
|
|
212
|
+
CostGrader,
|
|
210
213
|
DEFAULT_CATEGORY,
|
|
211
|
-
DEFAULT_EVALUATOR_TEMPLATE,
|
|
212
214
|
DEFAULT_EVAL_PATTERNS,
|
|
213
215
|
DEFAULT_EXPLORATION_TOOLS,
|
|
216
|
+
DEFAULT_GRADER_TEMPLATE,
|
|
214
217
|
DEFAULT_THRESHOLD,
|
|
215
|
-
|
|
218
|
+
DeterministicAssertionGrader,
|
|
216
219
|
DockerWorkspaceProvider,
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
LlmGraderEvaluator as LlmJudgeEvaluator,
|
|
220
|
+
ExecutionMetricsGrader,
|
|
221
|
+
FieldAccuracyGrader,
|
|
222
|
+
GraderRegistry,
|
|
223
|
+
LatencyGrader,
|
|
224
|
+
LlmGrader,
|
|
223
225
|
OTEL_BACKEND_PRESETS,
|
|
224
226
|
OtelStreamingObserver,
|
|
225
227
|
OtelTraceExporter,
|
|
@@ -228,18 +230,17 @@ export {
|
|
|
228
230
|
ProviderRegistry,
|
|
229
231
|
RepoManager,
|
|
230
232
|
ResponseCache,
|
|
231
|
-
|
|
233
|
+
SkillTriggerGrader,
|
|
232
234
|
TEST_MESSAGE_ROLES,
|
|
233
235
|
TemplateNotDirectoryError,
|
|
234
236
|
TemplateNotFoundError,
|
|
235
|
-
|
|
236
|
-
|
|
237
|
+
TokenUsageGrader,
|
|
238
|
+
ToolTrajectoryGrader,
|
|
237
239
|
TranscriptProvider,
|
|
238
240
|
WorkspaceCreationError,
|
|
239
241
|
WorkspacePoolManager,
|
|
240
242
|
addBenchmark,
|
|
241
243
|
assembleLlmGraderPrompt,
|
|
242
|
-
assembleLlmGraderPrompt as assembleLlmJudgePrompt,
|
|
243
244
|
avgToolDurationMs,
|
|
244
245
|
buildDirectoryChain,
|
|
245
246
|
buildOutputSchema,
|
|
@@ -279,7 +280,6 @@ export {
|
|
|
279
280
|
discoverCodexSessions,
|
|
280
281
|
discoverCopilotSessions,
|
|
281
282
|
discoverGraders,
|
|
282
|
-
discoverGraders as discoverJudges,
|
|
283
283
|
discoverProviders,
|
|
284
284
|
ensureResultsRepoClone,
|
|
285
285
|
ensureVSCodeSubagents,
|
|
@@ -321,7 +321,7 @@ export {
|
|
|
321
321
|
isAgentSkillsFormat,
|
|
322
322
|
isContent,
|
|
323
323
|
isContentArray,
|
|
324
|
-
|
|
324
|
+
isGraderKind,
|
|
325
325
|
isJsonObject,
|
|
326
326
|
isJsonValue,
|
|
327
327
|
isNonEmptyString,
|
|
@@ -337,6 +337,7 @@ export {
|
|
|
337
337
|
loadTestSuite,
|
|
338
338
|
loadTests,
|
|
339
339
|
loadTsConfig,
|
|
340
|
+
loadTsEvalFile,
|
|
340
341
|
mergeExecutionMetrics,
|
|
341
342
|
negateScore,
|
|
342
343
|
normalizeLineEndings,
|
|
@@ -399,4 +400,4 @@ export {
|
|
|
399
400
|
transpileEvalYamlFile,
|
|
400
401
|
trimBaselineResult
|
|
401
402
|
};
|
|
402
|
-
//# sourceMappingURL=dist-
|
|
403
|
+
//# sourceMappingURL=dist-RTIUSC6L.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/index.js
CHANGED
|
@@ -3,15 +3,17 @@ import {
|
|
|
3
3
|
app,
|
|
4
4
|
preprocessArgv,
|
|
5
5
|
runCli
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-L7WOR7IR.js";
|
|
7
|
+
import "./chunk-YGNBTBXW.js";
|
|
8
|
+
import "./chunk-NL6P5MUH.js";
|
|
9
|
+
import "./chunk-R2QDYORI.js";
|
|
9
10
|
import "./chunk-QOBQ5XYF.js";
|
|
11
|
+
import "./chunk-BPGJ4HBU.js";
|
|
12
|
+
import "./chunk-PTYQS37Y.js";
|
|
13
|
+
import "./chunk-ZKO2LGRR.js";
|
|
10
14
|
import "./chunk-NPVGBFF6.js";
|
|
11
15
|
import "./chunk-HQDCIXVH.js";
|
|
12
16
|
import "./chunk-LRULMAAA.js";
|
|
13
|
-
import "./chunk-BPGJ4HBU.js";
|
|
14
|
-
import "./chunk-ZKO2LGRR.js";
|
|
15
17
|
import "./chunk-5H446C7X.js";
|
|
16
18
|
export {
|
|
17
19
|
app,
|
|
@@ -7,18 +7,20 @@ import {
|
|
|
7
7
|
findRepoRoot,
|
|
8
8
|
getCategories,
|
|
9
9
|
runEvalCommand
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-YGNBTBXW.js";
|
|
11
|
+
import "./chunk-NL6P5MUH.js";
|
|
12
|
+
import "./chunk-R2QDYORI.js";
|
|
13
|
+
import "./chunk-QOBQ5XYF.js";
|
|
14
|
+
import "./chunk-BPGJ4HBU.js";
|
|
11
15
|
import {
|
|
12
16
|
getAgentvConfigDir,
|
|
13
17
|
listTargetNames,
|
|
14
18
|
readTargetDefinitions
|
|
15
|
-
} from "./chunk-
|
|
16
|
-
import "./chunk-
|
|
19
|
+
} from "./chunk-PTYQS37Y.js";
|
|
20
|
+
import "./chunk-ZKO2LGRR.js";
|
|
17
21
|
import "./chunk-NPVGBFF6.js";
|
|
18
22
|
import "./chunk-HQDCIXVH.js";
|
|
19
23
|
import "./chunk-LRULMAAA.js";
|
|
20
|
-
import "./chunk-BPGJ4HBU.js";
|
|
21
|
-
import "./chunk-ZKO2LGRR.js";
|
|
22
24
|
import "./chunk-5H446C7X.js";
|
|
23
25
|
|
|
24
26
|
// src/commands/eval/interactive.ts
|
|
@@ -328,4 +330,4 @@ ${ANSI_DIM}Retrying execution errors...${ANSI_RESET}
|
|
|
328
330
|
export {
|
|
329
331
|
launchInteractiveWizard
|
|
330
332
|
};
|
|
331
|
-
//# sourceMappingURL=interactive-
|
|
333
|
+
//# sourceMappingURL=interactive-UZSFYMCF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/eval/interactive.ts","../src/commands/eval/last-config.ts"],"sourcesContent":["import path from 'node:path';\nimport { listTargetNames, readTargetDefinitions } from '@agentv/core';\nimport { checkbox, confirm, number, search, select } from '@inquirer/prompts';\n\nimport { TARGET_FILE_CANDIDATES, fileExists } from '../../utils/targets.js';\nimport {\n type DiscoveredEvalFile,\n discoverEvalFiles,\n filterByCategory,\n getCategories,\n} from './discover.js';\nimport { type LastConfig, loadLastConfig, saveLastConfig } from './last-config.js';\nimport { runEvalCommand } from './run-eval.js';\nimport { findRepoRoot } from './shared.js';\n\nconst ANSI_BOLD = '\\x1b[1m';\nconst ANSI_DIM = '\\x1b[2m';\nconst ANSI_CYAN = '\\x1b[36m';\nconst ANSI_GREEN = '\\x1b[32m';\nconst ANSI_RESET = '\\x1b[0m';\n\nexport interface InteractiveConfig {\n readonly evalPaths: readonly string[];\n readonly target: string;\n readonly workers: number;\n readonly dryRun: boolean;\n readonly cache: boolean;\n}\n\n/**\n * Launch the interactive wizard when `agentv eval` is called with no arguments.\n */\nexport async function launchInteractiveWizard(): Promise<void> {\n const cwd = process.cwd();\n\n console.log(`\\n${ANSI_BOLD}${ANSI_CYAN}AgentV Interactive Mode${ANSI_RESET}\\n`);\n\n const lastConfig = await loadLastConfig();\n const action = await promptMainMenu(lastConfig);\n\n if (action === 'exit') {\n return;\n }\n\n if (action === 'rerun' && lastConfig) {\n console.log(`\\n${ANSI_DIM}Rerunning last configuration...${ANSI_RESET}\\n`);\n await executeConfig({\n evalPaths: lastConfig.evalPaths,\n target: lastConfig.target,\n workers: lastConfig.workers,\n dryRun: lastConfig.dryRun,\n cache: lastConfig.cache,\n });\n return;\n }\n\n // Run new evaluation flow\n const config = await promptNewEvaluation(cwd);\n if (!config) {\n return;\n }\n\n // Review & confirm\n const confirmed = await promptReviewAndConfirm(config, cwd);\n if (!confirmed) {\n return;\n }\n\n // Save last config\n await saveLastConfig({\n timestamp: new Date().toISOString(),\n cwd,\n evalPaths: config.evalPaths,\n target: config.target,\n workers: config.workers,\n dryRun: config.dryRun,\n cache: config.cache,\n });\n\n await executeConfig(config);\n}\n\nasync function promptMainMenu(\n lastConfig: LastConfig | undefined,\n): Promise<'new' | 'rerun' | 'exit'> {\n type MenuChoice = 'new' | 'rerun' | 'exit';\n const choices: Array<{ name: string; value: MenuChoice; description?: string }> = [];\n\n if (lastConfig) {\n const evalCount = lastConfig.evalPaths.length;\n choices.push({\n name: '🔄 Rerun last config',\n value: 'rerun',\n description: `${evalCount} eval file(s), target: ${lastConfig.target}`,\n });\n }\n\n choices.push({ name: '🚀 Run new evaluation', value: 'new' }, { name: '✕ Exit', value: 'exit' });\n\n return select<MenuChoice>({\n message: 'What would you like to do?',\n choices,\n });\n}\n\nasync function promptNewEvaluation(cwd: string): Promise<InteractiveConfig | undefined> {\n // Step 1: Discover eval files\n console.log(`\\n${ANSI_DIM}Scanning for eval files...${ANSI_RESET}`);\n const allFiles = await discoverEvalFiles(cwd);\n\n if (allFiles.length === 0) {\n console.log(\n '\\n⚠ No eval files found in the current directory.\\n' +\n ' Place .yaml or .jsonl eval files in your project, or use:\\n' +\n ' agentv eval <path-to-eval.yaml>\\n',\n );\n return undefined;\n }\n\n console.log(`${ANSI_DIM}Found ${allFiles.length} eval file(s)${ANSI_RESET}\\n`);\n\n // Step 2: Select eval files (optionally filter by category first)\n const selectedFiles = await promptEvalSelection(allFiles);\n if (selectedFiles.length === 0) {\n console.log('\\nNo eval files selected.');\n return undefined;\n }\n\n // Step 3: Select target\n const target = await promptTargetSelection(cwd, selectedFiles[0].path);\n\n // Step 4: Advanced options\n const advanced = await promptAdvancedOptions();\n\n return {\n evalPaths: selectedFiles.map((f) => f.path),\n target,\n ...advanced,\n };\n}\n\nasync function promptEvalSelection(\n allFiles: readonly DiscoveredEvalFile[],\n): Promise<DiscoveredEvalFile[]> {\n const categories = getCategories(allFiles);\n\n // If only one category or few files, skip category selection\n let filesToSelect: readonly DiscoveredEvalFile[];\n\n if (categories.length > 1) {\n const selectedCategory = await search<string>({\n message: 'Select a category (type to search)',\n source: async (term) => {\n const filtered = term\n ? categories.filter((c) => c.toLowerCase().includes(term.toLowerCase()))\n : categories;\n return [\n { name: '(all categories)', value: '__all__' },\n ...filtered.map((c) => {\n const count = filterByCategory(allFiles, c).length;\n return { name: `${c} (${count} file${count > 1 ? 's' : ''})`, value: c };\n }),\n ];\n },\n });\n\n filesToSelect =\n selectedCategory === '__all__' ? allFiles : filterByCategory(allFiles, selectedCategory);\n } else {\n filesToSelect = allFiles;\n }\n\n return checkbox<DiscoveredEvalFile>({\n message: 'Select eval files to run (space to toggle, enter to confirm)',\n choices: filesToSelect.map((f) => ({\n name: f.relativePath,\n value: f,\n checked: filesToSelect.length <= 5, // auto-select if few files\n })),\n required: true,\n });\n}\n\nasync function promptTargetSelection(cwd: string, firstEvalPath: string): Promise<string> {\n const repoRoot = await findRepoRoot(cwd);\n\n // Try to find targets.yaml — search near the eval file first, then cwd/repoRoot\n const targetsPath = await findTargetsFile(cwd, repoRoot, firstEvalPath);\n\n if (!targetsPath) {\n console.log(`${ANSI_DIM}No targets.yaml found. Using default target.${ANSI_RESET}`);\n return 'default';\n }\n\n const definitions = await readTargetDefinitions(targetsPath);\n const targetNames = listTargetNames(definitions);\n\n if (targetNames.length === 0) {\n return 'default';\n }\n\n if (targetNames.length === 1) {\n console.log(`${ANSI_DIM}Using target: ${targetNames[0]}${ANSI_RESET}`);\n return targetNames[0];\n }\n\n return search<string>({\n message: 'Select a target (type to search)',\n source: async (term) => {\n const filtered = term\n ? targetNames.filter((t) => t.toLowerCase().includes(term.toLowerCase()))\n : targetNames;\n return filtered.map((t) => {\n const def = definitions.find((d) => d.name === t);\n return {\n name: t,\n value: t,\n description: def ? `provider: ${def.provider}` : undefined,\n };\n });\n },\n });\n}\n\nasync function findTargetsFile(\n cwd: string,\n repoRoot: string,\n evalFilePath?: string,\n): Promise<string | undefined> {\n // Build directory chain: eval file dir → cwd → repoRoot (mirrors discoverTargetsFile)\n const dirsToSearch: string[] = [];\n\n if (evalFilePath) {\n const evalDir = path.dirname(evalFilePath);\n if (!dirsToSearch.includes(evalDir)) {\n dirsToSearch.push(evalDir);\n }\n }\n\n if (!dirsToSearch.includes(cwd)) {\n dirsToSearch.push(cwd);\n }\n\n if (repoRoot !== cwd && !dirsToSearch.includes(repoRoot)) {\n dirsToSearch.push(repoRoot);\n }\n\n for (const dir of dirsToSearch) {\n for (const candidate of TARGET_FILE_CANDIDATES) {\n const fullPath = `${dir}/${candidate}`;\n if (await fileExists(fullPath)) {\n return fullPath;\n }\n }\n }\n\n return undefined;\n}\n\nasync function promptAdvancedOptions(): Promise<{\n workers: number;\n dryRun: boolean;\n cache: boolean;\n}> {\n const customize = await confirm({\n message: 'Configure advanced options?',\n default: false,\n });\n\n if (!customize) {\n return { workers: 3, dryRun: false, cache: false };\n }\n\n const workers =\n (await number({\n message: 'Number of parallel workers (1-50)',\n default: 3,\n min: 1,\n max: 50,\n })) ?? 3;\n\n const dryRun = await confirm({\n message: 'Enable dry-run mode (mock responses)?',\n default: false,\n });\n\n const cache = await confirm({\n message: 'Enable response cache?',\n default: false,\n });\n\n return { workers, dryRun, cache };\n}\n\nasync function promptReviewAndConfirm(config: InteractiveConfig, cwd: string): Promise<boolean> {\n const evalDisplay = config.evalPaths\n .map((p) => {\n const rel = p.startsWith(cwd) ? p.slice(cwd.length + 1) : p;\n return ` ${rel}`;\n })\n .join('\\n');\n\n console.log(`\\n${ANSI_BOLD}Review Configuration${ANSI_RESET}`);\n console.log(`${ANSI_DIM}${'─'.repeat(40)}${ANSI_RESET}`);\n console.log(`${ANSI_GREEN}Eval files:${ANSI_RESET}\\n${evalDisplay}`);\n console.log(`${ANSI_GREEN}Target:${ANSI_RESET} ${config.target}`);\n console.log(`${ANSI_GREEN}Workers:${ANSI_RESET} ${config.workers}`);\n console.log(`${ANSI_GREEN}Dry run:${ANSI_RESET} ${config.dryRun ? 'yes' : 'no'}`);\n console.log(`${ANSI_GREEN}Cache:${ANSI_RESET} ${config.cache ? 'yes' : 'no'}`);\n console.log(`${ANSI_DIM}${'─'.repeat(40)}${ANSI_RESET}`);\n\n return confirm({\n message: 'Run evaluation with this configuration?',\n default: true,\n });\n}\n\nasync function executeConfig(config: InteractiveConfig): Promise<void> {\n const rawOptions: Record<string, unknown> = {\n target: config.target,\n workers: config.workers,\n dryRun: config.dryRun,\n cache: config.cache,\n outputFormat: 'jsonl',\n dryRunDelay: 0,\n dryRunDelayMin: 0,\n dryRunDelayMax: 0,\n agentTimeout: 120,\n maxRetries: 2,\n verbose: false,\n keepWorkspaces: false,\n cleanupWorkspaces: false,\n trace: false,\n };\n\n const result = await runEvalCommand({\n testFiles: [...config.evalPaths],\n rawOptions,\n });\n\n // Prompt to retry errors when execution errors were detected in a TTY\n if (result && result.executionErrorCount > 0 && process.stdin.isTTY) {\n await promptRetryErrors(config, result.outputPath);\n }\n}\n\nasync function promptRetryErrors(config: InteractiveConfig, outputPath: string): Promise<void> {\n const shouldRetry = await confirm({\n message: `Retry ${ANSI_BOLD}execution errors${ANSI_RESET} from this run?`,\n default: true,\n });\n\n if (!shouldRetry) {\n return;\n }\n\n console.log(`\\n${ANSI_DIM}Retrying execution errors...${ANSI_RESET}\\n`);\n\n const rawOptions: Record<string, unknown> = {\n target: config.target,\n workers: config.workers,\n dryRun: config.dryRun,\n cache: config.cache,\n outputFormat: 'jsonl',\n retryErrors: outputPath,\n out: outputPath,\n dryRunDelay: 0,\n dryRunDelayMin: 0,\n dryRunDelayMax: 0,\n agentTimeout: 120,\n maxRetries: 2,\n verbose: false,\n keepWorkspaces: false,\n cleanupWorkspaces: false,\n trace: false,\n };\n\n const retryResult = await runEvalCommand({\n testFiles: [...config.evalPaths],\n rawOptions,\n });\n\n // Allow chained retries if there are still errors\n if (retryResult && retryResult.executionErrorCount > 0 && process.stdin.isTTY) {\n await promptRetryErrors(config, retryResult.outputPath);\n }\n}\n","import { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { getAgentvConfigDir } from '@agentv/core';\n\nconst CONFIG_DIR = getAgentvConfigDir();\nconst LAST_CONFIG_PATH = path.join(CONFIG_DIR, 'last-config.json');\n\nexport interface LastConfig {\n readonly timestamp: string;\n readonly cwd: string;\n readonly evalPaths: readonly string[];\n readonly target: string;\n readonly workers: number;\n readonly dryRun: boolean;\n readonly cache: boolean;\n}\n\nexport async function loadLastConfig(): Promise<LastConfig | undefined> {\n try {\n const content = await readFile(LAST_CONFIG_PATH, 'utf-8');\n return JSON.parse(content) as LastConfig;\n } catch {\n return undefined;\n }\n}\n\nexport async function saveLastConfig(config: LastConfig): Promise<void> {\n await mkdir(CONFIG_DIR, { recursive: true });\n await writeFile(LAST_CONFIG_PATH, JSON.stringify(config, null, 2), 'utf-8');\n}\n"],"mappings":"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","names":["path","path"]}
|
|
1
|
+
{"version":3,"sources":["../src/commands/eval/interactive.ts","../src/commands/eval/last-config.ts"],"sourcesContent":["import path from 'node:path';\nimport { listTargetNames, readTargetDefinitions } from '@agentv/core';\nimport { checkbox, confirm, number, search, select } from '@inquirer/prompts';\n\nimport { TARGET_FILE_CANDIDATES, fileExists } from '../../utils/targets.js';\nimport {\n type DiscoveredEvalFile,\n discoverEvalFiles,\n filterByCategory,\n getCategories,\n} from './discover.js';\nimport { type LastConfig, loadLastConfig, saveLastConfig } from './last-config.js';\nimport { runEvalCommand } from './run-eval.js';\nimport { findRepoRoot } from './shared.js';\n\nconst ANSI_BOLD = '\\x1b[1m';\nconst ANSI_DIM = '\\x1b[2m';\nconst ANSI_CYAN = '\\x1b[36m';\nconst ANSI_GREEN = '\\x1b[32m';\nconst ANSI_RESET = '\\x1b[0m';\n\nexport interface InteractiveConfig {\n readonly evalPaths: readonly string[];\n readonly target: string;\n readonly workers: number;\n readonly dryRun: boolean;\n readonly cache: boolean;\n}\n\n/**\n * Launch the interactive wizard when `agentv eval` is called with no arguments.\n */\nexport async function launchInteractiveWizard(): Promise<void> {\n const cwd = process.cwd();\n\n console.log(`\\n${ANSI_BOLD}${ANSI_CYAN}AgentV Interactive Mode${ANSI_RESET}\\n`);\n\n const lastConfig = await loadLastConfig();\n const action = await promptMainMenu(lastConfig);\n\n if (action === 'exit') {\n return;\n }\n\n if (action === 'rerun' && lastConfig) {\n console.log(`\\n${ANSI_DIM}Rerunning last configuration...${ANSI_RESET}\\n`);\n await executeConfig({\n evalPaths: lastConfig.evalPaths,\n target: lastConfig.target,\n workers: lastConfig.workers,\n dryRun: lastConfig.dryRun,\n cache: lastConfig.cache,\n });\n return;\n }\n\n // Run new evaluation flow\n const config = await promptNewEvaluation(cwd);\n if (!config) {\n return;\n }\n\n // Review & confirm\n const confirmed = await promptReviewAndConfirm(config, cwd);\n if (!confirmed) {\n return;\n }\n\n // Save last config\n await saveLastConfig({\n timestamp: new Date().toISOString(),\n cwd,\n evalPaths: config.evalPaths,\n target: config.target,\n workers: config.workers,\n dryRun: config.dryRun,\n cache: config.cache,\n });\n\n await executeConfig(config);\n}\n\nasync function promptMainMenu(\n lastConfig: LastConfig | undefined,\n): Promise<'new' | 'rerun' | 'exit'> {\n type MenuChoice = 'new' | 'rerun' | 'exit';\n const choices: Array<{ name: string; value: MenuChoice; description?: string }> = [];\n\n if (lastConfig) {\n const evalCount = lastConfig.evalPaths.length;\n choices.push({\n name: '🔄 Rerun last config',\n value: 'rerun',\n description: `${evalCount} eval file(s), target: ${lastConfig.target}`,\n });\n }\n\n choices.push({ name: '🚀 Run new evaluation', value: 'new' }, { name: '✕ Exit', value: 'exit' });\n\n return select<MenuChoice>({\n message: 'What would you like to do?',\n choices,\n });\n}\n\nasync function promptNewEvaluation(cwd: string): Promise<InteractiveConfig | undefined> {\n // Step 1: Discover eval files\n console.log(`\\n${ANSI_DIM}Scanning for eval files...${ANSI_RESET}`);\n const allFiles = await discoverEvalFiles(cwd);\n\n if (allFiles.length === 0) {\n console.log(\n '\\n⚠ No eval files found in the current directory.\\n' +\n ' Place .yaml or .jsonl eval files in your project, or use:\\n' +\n ' agentv eval <path-to-eval.yaml>\\n',\n );\n return undefined;\n }\n\n console.log(`${ANSI_DIM}Found ${allFiles.length} eval file(s)${ANSI_RESET}\\n`);\n\n // Step 2: Select eval files (optionally filter by category first)\n const selectedFiles = await promptEvalSelection(allFiles);\n if (selectedFiles.length === 0) {\n console.log('\\nNo eval files selected.');\n return undefined;\n }\n\n // Step 3: Select target\n const target = await promptTargetSelection(cwd, selectedFiles[0].path);\n\n // Step 4: Advanced options\n const advanced = await promptAdvancedOptions();\n\n return {\n evalPaths: selectedFiles.map((f) => f.path),\n target,\n ...advanced,\n };\n}\n\nasync function promptEvalSelection(\n allFiles: readonly DiscoveredEvalFile[],\n): Promise<DiscoveredEvalFile[]> {\n const categories = getCategories(allFiles);\n\n // If only one category or few files, skip category selection\n let filesToSelect: readonly DiscoveredEvalFile[];\n\n if (categories.length > 1) {\n const selectedCategory = await search<string>({\n message: 'Select a category (type to search)',\n source: async (term) => {\n const filtered = term\n ? categories.filter((c) => c.toLowerCase().includes(term.toLowerCase()))\n : categories;\n return [\n { name: '(all categories)', value: '__all__' },\n ...filtered.map((c) => {\n const count = filterByCategory(allFiles, c).length;\n return { name: `${c} (${count} file${count > 1 ? 's' : ''})`, value: c };\n }),\n ];\n },\n });\n\n filesToSelect =\n selectedCategory === '__all__' ? allFiles : filterByCategory(allFiles, selectedCategory);\n } else {\n filesToSelect = allFiles;\n }\n\n return checkbox<DiscoveredEvalFile>({\n message: 'Select eval files to run (space to toggle, enter to confirm)',\n choices: filesToSelect.map((f) => ({\n name: f.relativePath,\n value: f,\n checked: filesToSelect.length <= 5, // auto-select if few files\n })),\n required: true,\n });\n}\n\nasync function promptTargetSelection(cwd: string, firstEvalPath: string): Promise<string> {\n const repoRoot = await findRepoRoot(cwd);\n\n // Try to find targets.yaml — search near the eval file first, then cwd/repoRoot\n const targetsPath = await findTargetsFile(cwd, repoRoot, firstEvalPath);\n\n if (!targetsPath) {\n console.log(`${ANSI_DIM}No targets.yaml found. Using default target.${ANSI_RESET}`);\n return 'default';\n }\n\n const definitions = await readTargetDefinitions(targetsPath);\n const targetNames = listTargetNames(definitions);\n\n if (targetNames.length === 0) {\n return 'default';\n }\n\n if (targetNames.length === 1) {\n console.log(`${ANSI_DIM}Using target: ${targetNames[0]}${ANSI_RESET}`);\n return targetNames[0];\n }\n\n return search<string>({\n message: 'Select a target (type to search)',\n source: async (term) => {\n const filtered = term\n ? targetNames.filter((t) => t.toLowerCase().includes(term.toLowerCase()))\n : targetNames;\n return filtered.map((t) => {\n const def = definitions.find((d) => d.name === t);\n return {\n name: t,\n value: t,\n description: def ? `provider: ${def.provider}` : undefined,\n };\n });\n },\n });\n}\n\nasync function findTargetsFile(\n cwd: string,\n repoRoot: string,\n evalFilePath?: string,\n): Promise<string | undefined> {\n // Build directory chain: eval file dir → cwd → repoRoot (mirrors discoverTargetsFile)\n const dirsToSearch: string[] = [];\n\n if (evalFilePath) {\n const evalDir = path.dirname(evalFilePath);\n if (!dirsToSearch.includes(evalDir)) {\n dirsToSearch.push(evalDir);\n }\n }\n\n if (!dirsToSearch.includes(cwd)) {\n dirsToSearch.push(cwd);\n }\n\n if (repoRoot !== cwd && !dirsToSearch.includes(repoRoot)) {\n dirsToSearch.push(repoRoot);\n }\n\n for (const dir of dirsToSearch) {\n for (const candidate of TARGET_FILE_CANDIDATES) {\n const fullPath = `${dir}/${candidate}`;\n if (await fileExists(fullPath)) {\n return fullPath;\n }\n }\n }\n\n return undefined;\n}\n\nasync function promptAdvancedOptions(): Promise<{\n workers: number;\n dryRun: boolean;\n cache: boolean;\n}> {\n const customize = await confirm({\n message: 'Configure advanced options?',\n default: false,\n });\n\n if (!customize) {\n return { workers: 3, dryRun: false, cache: false };\n }\n\n const workers =\n (await number({\n message: 'Number of parallel workers (1-50)',\n default: 3,\n min: 1,\n max: 50,\n })) ?? 3;\n\n const dryRun = await confirm({\n message: 'Enable dry-run mode (mock responses)?',\n default: false,\n });\n\n const cache = await confirm({\n message: 'Enable response cache?',\n default: false,\n });\n\n return { workers, dryRun, cache };\n}\n\nasync function promptReviewAndConfirm(config: InteractiveConfig, cwd: string): Promise<boolean> {\n const evalDisplay = config.evalPaths\n .map((p) => {\n const rel = p.startsWith(cwd) ? p.slice(cwd.length + 1) : p;\n return ` ${rel}`;\n })\n .join('\\n');\n\n console.log(`\\n${ANSI_BOLD}Review Configuration${ANSI_RESET}`);\n console.log(`${ANSI_DIM}${'─'.repeat(40)}${ANSI_RESET}`);\n console.log(`${ANSI_GREEN}Eval files:${ANSI_RESET}\\n${evalDisplay}`);\n console.log(`${ANSI_GREEN}Target:${ANSI_RESET} ${config.target}`);\n console.log(`${ANSI_GREEN}Workers:${ANSI_RESET} ${config.workers}`);\n console.log(`${ANSI_GREEN}Dry run:${ANSI_RESET} ${config.dryRun ? 'yes' : 'no'}`);\n console.log(`${ANSI_GREEN}Cache:${ANSI_RESET} ${config.cache ? 'yes' : 'no'}`);\n console.log(`${ANSI_DIM}${'─'.repeat(40)}${ANSI_RESET}`);\n\n return confirm({\n message: 'Run evaluation with this configuration?',\n default: true,\n });\n}\n\nasync function executeConfig(config: InteractiveConfig): Promise<void> {\n const rawOptions: Record<string, unknown> = {\n target: config.target,\n workers: config.workers,\n dryRun: config.dryRun,\n cache: config.cache,\n outputFormat: 'jsonl',\n dryRunDelay: 0,\n dryRunDelayMin: 0,\n dryRunDelayMax: 0,\n agentTimeout: 120,\n maxRetries: 2,\n verbose: false,\n keepWorkspaces: false,\n cleanupWorkspaces: false,\n trace: false,\n };\n\n const result = await runEvalCommand({\n testFiles: [...config.evalPaths],\n rawOptions,\n });\n\n // Prompt to retry errors when execution errors were detected in a TTY\n if (result && result.executionErrorCount > 0 && process.stdin.isTTY) {\n await promptRetryErrors(config, result.outputPath);\n }\n}\n\nasync function promptRetryErrors(config: InteractiveConfig, outputPath: string): Promise<void> {\n const shouldRetry = await confirm({\n message: `Retry ${ANSI_BOLD}execution errors${ANSI_RESET} from this run?`,\n default: true,\n });\n\n if (!shouldRetry) {\n return;\n }\n\n console.log(`\\n${ANSI_DIM}Retrying execution errors...${ANSI_RESET}\\n`);\n\n const rawOptions: Record<string, unknown> = {\n target: config.target,\n workers: config.workers,\n dryRun: config.dryRun,\n cache: config.cache,\n outputFormat: 'jsonl',\n retryErrors: outputPath,\n out: outputPath,\n dryRunDelay: 0,\n dryRunDelayMin: 0,\n dryRunDelayMax: 0,\n agentTimeout: 120,\n maxRetries: 2,\n verbose: false,\n keepWorkspaces: false,\n cleanupWorkspaces: false,\n trace: false,\n };\n\n const retryResult = await runEvalCommand({\n testFiles: [...config.evalPaths],\n rawOptions,\n });\n\n // Allow chained retries if there are still errors\n if (retryResult && retryResult.executionErrorCount > 0 && process.stdin.isTTY) {\n await promptRetryErrors(config, retryResult.outputPath);\n }\n}\n","import { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { getAgentvConfigDir } from '@agentv/core';\n\nconst CONFIG_DIR = getAgentvConfigDir();\nconst LAST_CONFIG_PATH = path.join(CONFIG_DIR, 'last-config.json');\n\nexport interface LastConfig {\n readonly timestamp: string;\n readonly cwd: string;\n readonly evalPaths: readonly string[];\n readonly target: string;\n readonly workers: number;\n readonly dryRun: boolean;\n readonly cache: boolean;\n}\n\nexport async function loadLastConfig(): Promise<LastConfig | undefined> {\n try {\n const content = await readFile(LAST_CONFIG_PATH, 'utf-8');\n return JSON.parse(content) as LastConfig;\n } catch {\n return undefined;\n }\n}\n\nexport async function saveLastConfig(config: LastConfig): Promise<void> {\n await mkdir(CONFIG_DIR, { recursive: true });\n await writeFile(LAST_CONFIG_PATH, JSON.stringify(config, null, 2), 'utf-8');\n}\n"],"mappings":"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","names":["path","path"]}
|