@agentv/core 0.7.5 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -115,10 +115,9 @@ var CLI_PLACEHOLDERS = /* @__PURE__ */ new Set(["PROMPT", "GUIDELINES", "EVAL_ID
115
115
  var BASE_TARGET_SCHEMA = z.object({
116
116
  name: z.string().min(1, "target name is required"),
117
117
  provider: z.string().min(1, "provider is required"),
118
- settings: z.record(z.unknown()).optional(),
119
118
  judge_target: z.string().optional(),
120
119
  workers: z.number().int().min(1).optional()
121
- });
120
+ }).passthrough();
122
121
  var DEFAULT_AZURE_API_VERSION = "2024-10-01-preview";
123
122
  function normalizeAzureApiVersion(value) {
124
123
  if (!value) {
@@ -131,11 +130,43 @@ function normalizeAzureApiVersion(value) {
131
130
  const withoutPrefix = trimmed.replace(/^api[-_]?version\s*=\s*/i, "").trim();
132
131
  return withoutPrefix.length > 0 ? withoutPrefix : DEFAULT_AZURE_API_VERSION;
133
132
  }
133
+ function resolveRetryConfig(target) {
134
+ const maxRetries = resolveOptionalNumber(
135
+ target.max_retries ?? target.maxRetries,
136
+ `${target.name} max retries`
137
+ );
138
+ const initialDelayMs = resolveOptionalNumber(
139
+ target.retry_initial_delay_ms ?? target.retryInitialDelayMs,
140
+ `${target.name} retry initial delay`
141
+ );
142
+ const maxDelayMs = resolveOptionalNumber(
143
+ target.retry_max_delay_ms ?? target.retryMaxDelayMs,
144
+ `${target.name} retry max delay`
145
+ );
146
+ const backoffFactor = resolveOptionalNumber(
147
+ target.retry_backoff_factor ?? target.retryBackoffFactor,
148
+ `${target.name} retry backoff factor`
149
+ );
150
+ const retryableStatusCodes = resolveOptionalNumberArray(
151
+ target.retry_status_codes ?? target.retryStatusCodes,
152
+ `${target.name} retry status codes`
153
+ );
154
+ if (maxRetries === void 0 && initialDelayMs === void 0 && maxDelayMs === void 0 && backoffFactor === void 0 && retryableStatusCodes === void 0) {
155
+ return void 0;
156
+ }
157
+ return {
158
+ maxRetries,
159
+ initialDelayMs,
160
+ maxDelayMs,
161
+ backoffFactor,
162
+ retryableStatusCodes
163
+ };
164
+ }
134
165
  function resolveTargetDefinition(definition, env = process.env) {
135
166
  const parsed = BASE_TARGET_SCHEMA.parse(definition);
136
167
  const provider = parsed.provider.toLowerCase();
137
168
  const providerBatching = resolveOptionalBoolean(
138
- parsed.settings?.provider_batching ?? parsed.settings?.providerBatching
169
+ parsed.provider_batching ?? parsed.providerBatching
139
170
  );
140
171
  switch (provider) {
141
172
  case "azure":
@@ -211,13 +242,12 @@ function resolveTargetDefinition(definition, env = process.env) {
211
242
  }
212
243
  }
213
244
  function resolveAzureConfig(target, env) {
214
- const settings = target.settings ?? {};
215
- const endpointSource = settings.endpoint ?? settings.resource ?? settings.resourceName;
216
- const apiKeySource = settings.api_key ?? settings.apiKey;
217
- const deploymentSource = settings.deployment ?? settings.deploymentName ?? settings.model;
218
- const versionSource = settings.version ?? settings.api_version;
219
- const temperatureSource = settings.temperature;
220
- const maxTokensSource = settings.max_output_tokens ?? settings.maxTokens;
245
+ const endpointSource = target.endpoint ?? target.resource ?? target.resourceName;
246
+ const apiKeySource = target.api_key ?? target.apiKey;
247
+ const deploymentSource = target.deployment ?? target.deploymentName ?? target.model;
248
+ const versionSource = target.version ?? target.api_version;
249
+ const temperatureSource = target.temperature;
250
+ const maxTokensSource = target.max_output_tokens ?? target.maxTokens;
221
251
  const resourceName = resolveString(endpointSource, env, `${target.name} endpoint`);
222
252
  const apiKey = resolveString(apiKeySource, env, `${target.name} api key`);
223
253
  const deploymentName = resolveString(deploymentSource, env, `${target.name} deployment`);
@@ -229,58 +259,61 @@ function resolveAzureConfig(target, env) {
229
259
  maxTokensSource,
230
260
  `${target.name} max output tokens`
231
261
  );
262
+ const retry = resolveRetryConfig(target);
232
263
  return {
233
264
  resourceName,
234
265
  deploymentName,
235
266
  apiKey,
236
267
  version,
237
268
  temperature,
238
- maxOutputTokens
269
+ maxOutputTokens,
270
+ retry
239
271
  };
240
272
  }
241
273
  function resolveAnthropicConfig(target, env) {
242
- const settings = target.settings ?? {};
243
- const apiKeySource = settings.api_key ?? settings.apiKey;
244
- const modelSource = settings.model ?? settings.deployment ?? settings.variant;
245
- const temperatureSource = settings.temperature;
246
- const maxTokensSource = settings.max_output_tokens ?? settings.maxTokens;
247
- const thinkingBudgetSource = settings.thinking_budget ?? settings.thinkingBudget;
274
+ const apiKeySource = target.api_key ?? target.apiKey;
275
+ const modelSource = target.model ?? target.deployment ?? target.variant;
276
+ const temperatureSource = target.temperature;
277
+ const maxTokensSource = target.max_output_tokens ?? target.maxTokens;
278
+ const thinkingBudgetSource = target.thinking_budget ?? target.thinkingBudget;
248
279
  const apiKey = resolveString(apiKeySource, env, `${target.name} Anthropic api key`);
249
280
  const model = resolveString(modelSource, env, `${target.name} Anthropic model`);
281
+ const retry = resolveRetryConfig(target);
250
282
  return {
251
283
  apiKey,
252
284
  model,
253
285
  temperature: resolveOptionalNumber(temperatureSource, `${target.name} temperature`),
254
286
  maxOutputTokens: resolveOptionalNumber(maxTokensSource, `${target.name} max output tokens`),
255
- thinkingBudget: resolveOptionalNumber(thinkingBudgetSource, `${target.name} thinking budget`)
287
+ thinkingBudget: resolveOptionalNumber(thinkingBudgetSource, `${target.name} thinking budget`),
288
+ retry
256
289
  };
257
290
  }
258
291
  function resolveGeminiConfig(target, env) {
259
- const settings = target.settings ?? {};
260
- const apiKeySource = settings.api_key ?? settings.apiKey;
261
- const modelSource = settings.model ?? settings.deployment ?? settings.variant;
262
- const temperatureSource = settings.temperature;
263
- const maxTokensSource = settings.max_output_tokens ?? settings.maxTokens;
292
+ const apiKeySource = target.api_key ?? target.apiKey;
293
+ const modelSource = target.model ?? target.deployment ?? target.variant;
294
+ const temperatureSource = target.temperature;
295
+ const maxTokensSource = target.max_output_tokens ?? target.maxTokens;
264
296
  const apiKey = resolveString(apiKeySource, env, `${target.name} Google API key`);
265
297
  const model = resolveOptionalString(modelSource, env, `${target.name} Gemini model`, {
266
298
  allowLiteral: true,
267
299
  optionalEnv: true
268
300
  }) ?? "gemini-2.5-flash";
301
+ const retry = resolveRetryConfig(target);
269
302
  return {
270
303
  apiKey,
271
304
  model,
272
305
  temperature: resolveOptionalNumber(temperatureSource, `${target.name} temperature`),
273
- maxOutputTokens: resolveOptionalNumber(maxTokensSource, `${target.name} max output tokens`)
306
+ maxOutputTokens: resolveOptionalNumber(maxTokensSource, `${target.name} max output tokens`),
307
+ retry
274
308
  };
275
309
  }
276
310
  function resolveCodexConfig(target, env) {
277
- const settings = target.settings ?? {};
278
- const executableSource = settings.executable ?? settings.command ?? settings.binary;
279
- const argsSource = settings.args ?? settings.arguments;
280
- const cwdSource = settings.cwd;
281
- const timeoutSource = settings.timeout_seconds ?? settings.timeoutSeconds;
282
- const logDirSource = settings.log_dir ?? settings.logDir ?? settings.log_directory ?? settings.logDirectory;
283
- const logFormatSource = settings.log_format ?? settings.logFormat ?? settings.log_output_format ?? settings.logOutputFormat ?? env.AGENTV_CODEX_LOG_FORMAT;
311
+ const executableSource = target.executable ?? target.command ?? target.binary;
312
+ const argsSource = target.args ?? target.arguments;
313
+ const cwdSource = target.cwd;
314
+ const timeoutSource = target.timeout_seconds ?? target.timeoutSeconds;
315
+ const logDirSource = target.log_dir ?? target.logDir ?? target.log_directory ?? target.logDirectory;
316
+ const logFormatSource = target.log_format ?? target.logFormat ?? target.log_output_format ?? target.logOutputFormat ?? env.AGENTV_CODEX_LOG_FORMAT;
284
317
  const executable = resolveOptionalString(executableSource, env, `${target.name} codex executable`, {
285
318
  allowLiteral: true,
286
319
  optionalEnv: true
@@ -319,21 +352,19 @@ function normalizeCodexLogFormat(value) {
319
352
  throw new Error("codex log format must be 'summary' or 'json'");
320
353
  }
321
354
  function resolveMockConfig(target) {
322
- const settings = target.settings ?? {};
323
- const response = typeof settings.response === "string" ? settings.response : void 0;
355
+ const response = typeof target.response === "string" ? target.response : void 0;
324
356
  return { response };
325
357
  }
326
358
  function resolveVSCodeConfig(target, env, insiders) {
327
- const settings = target.settings ?? {};
328
- const workspaceTemplateEnvVar = resolveOptionalLiteralString(settings.workspace_template ?? settings.workspaceTemplate);
359
+ const workspaceTemplateEnvVar = resolveOptionalLiteralString(target.workspace_template ?? target.workspaceTemplate);
329
360
  const workspaceTemplate = workspaceTemplateEnvVar ? resolveOptionalString(workspaceTemplateEnvVar, env, `${target.name} workspace template path`, {
330
361
  allowLiteral: false,
331
362
  optionalEnv: true
332
363
  }) : void 0;
333
- const commandSource = settings.vscode_cmd ?? settings.command;
334
- const waitSource = settings.wait;
335
- const dryRunSource = settings.dry_run ?? settings.dryRun;
336
- const subagentRootSource = settings.subagent_root ?? settings.subagentRoot;
364
+ const commandSource = target.vscode_cmd ?? target.command;
365
+ const waitSource = target.wait;
366
+ const dryRunSource = target.dry_run ?? target.dryRun;
367
+ const subagentRootSource = target.subagent_root ?? target.subagentRoot;
337
368
  const defaultCommand = insiders ? "code-insiders" : "code";
338
369
  const command = resolveOptionalLiteralString(commandSource) ?? defaultCommand;
339
370
  return {
@@ -348,18 +379,16 @@ function resolveVSCodeConfig(target, env, insiders) {
348
379
  };
349
380
  }
350
381
  function resolveCliConfig(target, env) {
351
- const settings = target.settings ?? {};
352
- const commandTemplateSource = settings.command_template ?? settings.commandTemplate;
382
+ const commandTemplateSource = target.command_template ?? target.commandTemplate;
353
383
  const filesFormat = resolveOptionalLiteralString(
354
- settings.files_format ?? settings.filesFormat ?? settings.attachments_format ?? settings.attachmentsFormat
384
+ target.files_format ?? target.filesFormat ?? target.attachments_format ?? target.attachmentsFormat
355
385
  );
356
- const cwd = resolveOptionalString(settings.cwd, env, `${target.name} working directory`, {
386
+ const cwd = resolveOptionalString(target.cwd, env, `${target.name} working directory`, {
357
387
  allowLiteral: true,
358
388
  optionalEnv: true
359
389
  });
360
- const envOverrides = resolveEnvOverrides(settings.env, env, target.name);
361
- const timeoutMs = resolveTimeoutMs(settings.timeout_seconds ?? settings.timeoutSeconds, `${target.name} timeout`);
362
- const healthcheck = resolveCliHealthcheck(settings.healthcheck, env, target.name);
390
+ const timeoutMs = resolveTimeoutMs(target.timeout_seconds ?? target.timeoutSeconds, `${target.name} timeout`);
391
+ const healthcheck = resolveCliHealthcheck(target.healthcheck, env, target.name);
363
392
  const commandTemplate = resolveString(
364
393
  commandTemplateSource,
365
394
  env,
@@ -371,29 +400,10 @@ function resolveCliConfig(target, env) {
371
400
  commandTemplate,
372
401
  filesFormat,
373
402
  cwd,
374
- env: envOverrides,
375
403
  timeoutMs,
376
404
  healthcheck
377
405
  };
378
406
  }
379
- function resolveEnvOverrides(source, env, targetName) {
380
- if (source === void 0 || source === null) {
381
- return void 0;
382
- }
383
- if (typeof source !== "object" || Array.isArray(source)) {
384
- throw new Error(`${targetName} env overrides must be an object map of strings`);
385
- }
386
- const entries = Object.entries(source);
387
- const resolved = {};
388
- for (const [key, value] of entries) {
389
- if (typeof value !== "string") {
390
- throw new Error(`${targetName} env override '${key}' must be a string`);
391
- }
392
- const resolvedValue = resolveString(value, env, `${targetName} env override '${key}'`);
393
- resolved[key] = resolvedValue;
394
- }
395
- return Object.keys(resolved).length > 0 ? resolved : void 0;
396
- }
397
407
  function resolveTimeoutMs(source, description) {
398
408
  const seconds = resolveOptionalNumber(source, `${description} (seconds)`);
399
409
  if (seconds === void 0) {
@@ -589,6 +599,26 @@ function resolveOptionalStringArray(source, env, description) {
589
599
  }
590
600
  return resolved.length > 0 ? resolved : void 0;
591
601
  }
602
+ function resolveOptionalNumberArray(source, description) {
603
+ if (source === void 0 || source === null) {
604
+ return void 0;
605
+ }
606
+ if (!Array.isArray(source)) {
607
+ throw new Error(`${description} must be an array of numbers`);
608
+ }
609
+ if (source.length === 0) {
610
+ return void 0;
611
+ }
612
+ const resolved = [];
613
+ for (let i = 0; i < source.length; i++) {
614
+ const item = source[i];
615
+ if (typeof item !== "number" || !Number.isFinite(item)) {
616
+ throw new Error(`${description}[${i}] must be a number`);
617
+ }
618
+ resolved.push(item);
619
+ }
620
+ return resolved.length > 0 ? resolved : void 0;
621
+ }
592
622
 
593
623
  // src/evaluation/providers/types.ts
594
624
  var AGENT_PROVIDER_KINDS = [
@@ -622,7 +652,7 @@ var PROVIDER_ALIASES = [
622
652
  "vertex"
623
653
  // legacy/future support
624
654
  ];
625
- var TARGETS_SCHEMA_V2 = "agentv-targets-v2.1";
655
+ var TARGETS_SCHEMA_V2 = "agentv-targets-v2.2";
626
656
  function isAgentProvider(provider) {
627
657
  return provider ? AGENT_PROVIDER_KINDS.includes(provider.kind) : false;
628
658
  }
@@ -642,4 +672,4 @@ export {
642
672
  TARGETS_SCHEMA_V2,
643
673
  isAgentProvider
644
674
  };
645
- //# sourceMappingURL=chunk-7XM7HYRS.js.map
675
+ //# sourceMappingURL=chunk-YQBJAT5I.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/evaluation/file-utils.ts","../src/evaluation/providers/targets.ts","../src/evaluation/providers/types.ts"],"sourcesContent":["import { constants } from \"node:fs\";\r\nimport { access, readFile } from \"node:fs/promises\";\r\nimport path from \"node:path\";\r\n\r\nexport async function fileExists(filePath: string): Promise<boolean> {\r\n try {\r\n await access(filePath, constants.F_OK);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Normalize line endings to LF (\\n).\r\n * This ensures consistent behavior across Windows (CRLF) and Unix (LF) systems.\r\n */\r\nexport function normalizeLineEndings(content: string): string {\r\n return content.replace(/\\r\\n/g, \"\\n\");\r\n}\r\n\r\n/**\r\n * Read a text file and normalize line endings to LF (\\n).\r\n * This ensures consistent behavior across Windows (CRLF) and Unix (LF) systems.\r\n */\r\nexport async function readTextFile(filePath: string): Promise<string> {\r\n const content = await readFile(filePath, \"utf8\");\r\n return normalizeLineEndings(content);\r\n}\r\n\r\n/**\r\n * Find git repository root by walking up the directory tree.\r\n */\r\nexport async function findGitRoot(startPath: string): Promise<string | null> {\r\n let currentDir = path.dirname(path.resolve(startPath));\r\n const root = path.parse(currentDir).root;\r\n\r\n while (currentDir !== root) {\r\n const gitPath = path.join(currentDir, \".git\");\r\n if (await fileExists(gitPath)) {\r\n return currentDir;\r\n }\r\n\r\n const parentDir = path.dirname(currentDir);\r\n if (parentDir === currentDir) {\r\n break;\r\n }\r\n currentDir = parentDir;\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * Build a chain of directories walking from a file's location up to repo root.\r\n * Used for discovering configuration files like targets.yaml or config.yaml.\r\n */\r\nexport function buildDirectoryChain(filePath: string, repoRoot: string): readonly string[] {\r\n const directories: string[] = [];\r\n const seen = new Set<string>();\r\n const boundary = path.resolve(repoRoot);\r\n let current: string | undefined = path.resolve(path.dirname(filePath));\r\n\r\n while (current !== undefined) {\r\n if (!seen.has(current)) {\r\n directories.push(current);\r\n seen.add(current);\r\n }\r\n if (current === boundary) {\r\n break;\r\n }\r\n const parent = path.dirname(current);\r\n if (parent === current) {\r\n break;\r\n }\r\n current = parent;\r\n }\r\n\r\n if (!seen.has(boundary)) {\r\n directories.push(boundary);\r\n }\r\n\r\n return directories;\r\n}\r\n\r\n/**\r\n * Build search roots for file resolution, matching yaml-parser behavior.\r\n * Searches from eval file directory up to repo root.\r\n */\r\nexport function buildSearchRoots(evalPath: string, repoRoot: string): readonly string[] {\r\n const uniqueRoots: string[] = [];\r\n const addRoot = (root: string): void => {\r\n const normalized = path.resolve(root);\r\n if (!uniqueRoots.includes(normalized)) {\r\n uniqueRoots.push(normalized);\r\n }\r\n };\r\n\r\n let currentDir = path.dirname(evalPath);\r\n let reachedBoundary = false;\r\n while (!reachedBoundary) {\r\n addRoot(currentDir);\r\n const parentDir = path.dirname(currentDir);\r\n if (currentDir === repoRoot || parentDir === currentDir) {\r\n reachedBoundary = true;\r\n } else {\r\n currentDir = parentDir;\r\n }\r\n }\r\n\r\n addRoot(repoRoot);\r\n addRoot(process.cwd());\r\n return uniqueRoots;\r\n}\r\n\r\n/**\r\n * Trim leading path separators for display.\r\n */\r\nfunction trimLeadingSeparators(value: string): string {\r\n const trimmed = value.replace(/^[/\\\\]+/, \"\");\r\n return trimmed.length > 0 ? trimmed : value;\r\n}\r\n\r\n/**\r\n * Resolve a file reference using search roots, matching yaml-parser behavior.\r\n */\r\nexport async function resolveFileReference(\r\n rawValue: string,\r\n searchRoots: readonly string[],\r\n): Promise<{\r\n readonly displayPath: string;\r\n readonly resolvedPath?: string;\r\n readonly attempted: readonly string[];\r\n}> {\r\n const displayPath = trimLeadingSeparators(rawValue);\r\n const potentialPaths: string[] = [];\r\n\r\n if (path.isAbsolute(rawValue)) {\r\n potentialPaths.push(path.normalize(rawValue));\r\n }\r\n\r\n for (const base of searchRoots) {\r\n potentialPaths.push(path.resolve(base, displayPath));\r\n }\r\n\r\n const attempted: string[] = [];\r\n const seen = new Set<string>();\r\n for (const candidate of potentialPaths) {\r\n const absoluteCandidate = path.resolve(candidate);\r\n if (seen.has(absoluteCandidate)) {\r\n continue;\r\n }\r\n seen.add(absoluteCandidate);\r\n attempted.push(absoluteCandidate);\r\n if (await fileExists(absoluteCandidate)) {\r\n return { displayPath, resolvedPath: absoluteCandidate, attempted };\r\n }\r\n }\r\n\r\n return { displayPath, attempted };\r\n}\r\n","import { z } from \"zod\";\r\n\r\nimport type { EnvLookup, TargetDefinition } from \"./types.js\";\r\n\r\nexport const CLI_PLACEHOLDERS = new Set([\"PROMPT\", \"GUIDELINES\", \"EVAL_ID\", \"ATTEMPT\", \"FILES\", \"OUTPUT_FILE\"]);\r\n\r\nexport interface RetryConfig {\r\n readonly maxRetries?: number;\r\n readonly initialDelayMs?: number;\r\n readonly maxDelayMs?: number;\r\n readonly backoffFactor?: number;\r\n readonly retryableStatusCodes?: readonly number[];\r\n}\r\n\r\nexport interface AzureResolvedConfig {\r\n readonly resourceName: string;\r\n readonly deploymentName: string;\r\n readonly apiKey: string;\r\n readonly version?: string;\r\n readonly temperature?: number;\r\n readonly maxOutputTokens?: number;\r\n readonly retry?: RetryConfig;\r\n}\r\n\r\nexport interface AnthropicResolvedConfig {\r\n readonly apiKey: string;\r\n readonly model: string;\r\n readonly temperature?: number;\r\n readonly maxOutputTokens?: number;\r\n readonly thinkingBudget?: number;\r\n readonly retry?: RetryConfig;\r\n}\r\n\r\nexport interface GeminiResolvedConfig {\r\n readonly apiKey: string;\r\n readonly model: string;\r\n readonly temperature?: number;\r\n readonly maxOutputTokens?: number;\r\n readonly retry?: RetryConfig;\r\n}\r\n\r\nexport interface CodexResolvedConfig {\r\n readonly executable: string;\r\n readonly args?: readonly string[];\r\n readonly cwd?: string;\r\n readonly timeoutMs?: number;\r\n readonly logDir?: string;\r\n readonly logFormat?: \"summary\" | \"json\";\r\n}\r\n\r\nexport interface MockResolvedConfig {\r\n readonly response?: string;\r\n readonly delayMs?: number;\r\n readonly delayMinMs?: number;\r\n readonly delayMaxMs?: number;\r\n}\r\n\r\nexport interface VSCodeResolvedConfig {\r\n readonly command: string;\r\n readonly waitForResponse: boolean;\r\n readonly dryRun: boolean;\r\n readonly subagentRoot?: string;\r\n readonly workspaceTemplate?: string;\r\n}\r\n\r\nexport type CliHealthcheck =\r\n | {\r\n readonly type: \"http\";\r\n readonly url: string;\r\n readonly timeoutMs?: number;\r\n }\r\n | {\r\n readonly type: \"command\";\r\n readonly commandTemplate: string;\r\n readonly timeoutMs?: number;\r\n readonly cwd?: string;\r\n };\r\n\r\nexport interface CliResolvedConfig {\r\n readonly commandTemplate: string;\r\n readonly filesFormat?: string;\r\n readonly cwd?: string;\r\n readonly timeoutMs?: number;\r\n readonly healthcheck?: CliHealthcheck;\r\n}\r\n\r\nexport type ResolvedTarget =\r\n | {\r\n readonly kind: \"azure\";\r\n readonly name: string;\r\n readonly judgeTarget?: string;\r\n readonly workers?: number;\r\n readonly providerBatching?: boolean;\r\n readonly config: AzureResolvedConfig;\r\n }\r\n | {\r\n readonly kind: \"anthropic\";\r\n readonly name: string;\r\n readonly judgeTarget?: string;\r\n readonly workers?: number;\r\n readonly providerBatching?: boolean;\r\n readonly config: AnthropicResolvedConfig;\r\n }\r\n | {\r\n readonly kind: \"gemini\";\r\n readonly name: string;\r\n readonly judgeTarget?: string;\r\n readonly workers?: number;\r\n readonly providerBatching?: boolean;\r\n readonly config: GeminiResolvedConfig;\r\n }\r\n | {\r\n readonly kind: \"codex\";\r\n readonly name: string;\r\n readonly judgeTarget?: string;\r\n readonly workers?: number;\r\n readonly providerBatching?: boolean;\r\n readonly config: CodexResolvedConfig;\r\n }\r\n | {\r\n readonly kind: \"mock\";\r\n readonly name: string;\r\n readonly judgeTarget?: string;\r\n readonly workers?: number;\r\n readonly providerBatching?: boolean;\r\n readonly config: MockResolvedConfig;\r\n }\r\n | {\r\n readonly kind: \"vscode\" | \"vscode-insiders\";\r\n readonly name: string;\r\n readonly judgeTarget?: string;\r\n readonly workers?: number;\r\n readonly providerBatching?: boolean;\r\n readonly config: VSCodeResolvedConfig;\r\n }\r\n | {\r\n readonly kind: \"cli\";\r\n readonly name: string;\r\n readonly judgeTarget?: string;\r\n readonly workers?: number;\r\n readonly providerBatching?: boolean;\r\n readonly config: CliResolvedConfig;\r\n };\r\n\r\nconst BASE_TARGET_SCHEMA = z.object({\r\n name: z.string().min(1, \"target name is required\"),\r\n provider: z.string().min(1, \"provider is required\"),\r\n judge_target: z.string().optional(),\r\n workers: z.number().int().min(1).optional(),\r\n}).passthrough();\r\n\r\nconst DEFAULT_AZURE_API_VERSION = \"2024-10-01-preview\";\r\n\r\nfunction normalizeAzureApiVersion(value: string | undefined): string {\r\n if (!value) {\r\n return DEFAULT_AZURE_API_VERSION;\r\n }\r\n\r\n const trimmed = value.trim();\r\n if (trimmed.length === 0) {\r\n return DEFAULT_AZURE_API_VERSION;\r\n }\r\n\r\n const withoutPrefix = trimmed.replace(/^api[-_]?version\\s*=\\s*/i, \"\").trim();\r\n return withoutPrefix.length > 0 ? withoutPrefix : DEFAULT_AZURE_API_VERSION;\r\n}\r\n\r\nfunction resolveRetryConfig(target: z.infer<typeof BASE_TARGET_SCHEMA>): RetryConfig | undefined {\r\n const maxRetries = resolveOptionalNumber(\r\n target.max_retries ?? target.maxRetries,\r\n `${target.name} max retries`,\r\n );\r\n const initialDelayMs = resolveOptionalNumber(\r\n target.retry_initial_delay_ms ?? target.retryInitialDelayMs,\r\n `${target.name} retry initial delay`,\r\n );\r\n const maxDelayMs = resolveOptionalNumber(\r\n target.retry_max_delay_ms ?? target.retryMaxDelayMs,\r\n `${target.name} retry max delay`,\r\n );\r\n const backoffFactor = resolveOptionalNumber(\r\n target.retry_backoff_factor ?? target.retryBackoffFactor,\r\n `${target.name} retry backoff factor`,\r\n );\r\n const retryableStatusCodes = resolveOptionalNumberArray(\r\n target.retry_status_codes ?? target.retryStatusCodes,\r\n `${target.name} retry status codes`,\r\n );\r\n\r\n // Only return retry config if at least one field is set\r\n if (\r\n maxRetries === undefined &&\r\n initialDelayMs === undefined &&\r\n maxDelayMs === undefined &&\r\n backoffFactor === undefined &&\r\n retryableStatusCodes === undefined\r\n ) {\r\n return undefined;\r\n }\r\n\r\n return {\r\n maxRetries,\r\n initialDelayMs,\r\n maxDelayMs,\r\n backoffFactor,\r\n retryableStatusCodes,\r\n };\r\n}\r\n\r\nexport function resolveTargetDefinition(\r\n definition: TargetDefinition,\r\n env: EnvLookup = process.env,\r\n): ResolvedTarget {\r\n const parsed = BASE_TARGET_SCHEMA.parse(definition);\r\n const provider = parsed.provider.toLowerCase();\r\n const providerBatching = resolveOptionalBoolean(\r\n parsed.provider_batching ?? parsed.providerBatching,\r\n );\r\n\r\n switch (provider) {\r\n case \"azure\":\r\n case \"azure-openai\":\r\n return {\r\n kind: \"azure\",\r\n name: parsed.name,\r\n judgeTarget: parsed.judge_target,\r\n workers: parsed.workers,\r\n providerBatching,\r\n config: resolveAzureConfig(parsed, env),\r\n };\r\n case \"anthropic\":\r\n return {\r\n kind: \"anthropic\",\r\n name: parsed.name,\r\n judgeTarget: parsed.judge_target,\r\n workers: parsed.workers,\r\n providerBatching,\r\n config: resolveAnthropicConfig(parsed, env),\r\n };\r\n case \"gemini\":\r\n case \"google\":\r\n case \"google-gemini\":\r\n return {\r\n kind: \"gemini\",\r\n name: parsed.name,\r\n judgeTarget: parsed.judge_target,\r\n workers: parsed.workers,\r\n providerBatching,\r\n config: resolveGeminiConfig(parsed, env),\r\n };\r\n case \"codex\":\r\n case \"codex-cli\":\r\n return {\r\n kind: \"codex\",\r\n name: parsed.name,\r\n judgeTarget: parsed.judge_target,\r\n workers: parsed.workers,\r\n providerBatching,\r\n config: resolveCodexConfig(parsed, env),\r\n };\r\n case \"mock\":\r\n return {\r\n kind: \"mock\",\r\n name: parsed.name,\r\n judgeTarget: parsed.judge_target,\r\n workers: parsed.workers,\r\n providerBatching,\r\n config: resolveMockConfig(parsed),\r\n };\r\n case \"vscode\":\r\n case \"vscode-insiders\":\r\n return {\r\n kind: provider as \"vscode\" | \"vscode-insiders\",\r\n name: parsed.name,\r\n judgeTarget: parsed.judge_target,\r\n workers: parsed.workers,\r\n providerBatching,\r\n config: resolveVSCodeConfig(parsed, env, provider === \"vscode-insiders\"),\r\n };\r\n case \"cli\":\r\n return {\r\n kind: \"cli\",\r\n name: parsed.name,\r\n judgeTarget: parsed.judge_target,\r\n workers: parsed.workers,\r\n providerBatching,\r\n config: resolveCliConfig(parsed, env),\r\n };\r\n default:\r\n throw new Error(`Unsupported provider '${parsed.provider}' in target '${parsed.name}'`);\r\n }\r\n}\r\n\r\nfunction resolveAzureConfig(\r\n target: z.infer<typeof BASE_TARGET_SCHEMA>,\r\n env: EnvLookup,\r\n): AzureResolvedConfig {\r\n const endpointSource = target.endpoint ?? target.resource ?? target.resourceName;\r\n const apiKeySource = target.api_key ?? target.apiKey;\r\n const deploymentSource = target.deployment ?? target.deploymentName ?? target.model;\r\n const versionSource = target.version ?? target.api_version;\r\n const temperatureSource = target.temperature;\r\n const maxTokensSource = target.max_output_tokens ?? target.maxTokens;\r\n\r\n const resourceName = resolveString(endpointSource, env, `${target.name} endpoint`);\r\n const apiKey = resolveString(apiKeySource, env, `${target.name} api key`);\r\n const deploymentName = resolveString(deploymentSource, env, `${target.name} deployment`);\r\n const version = normalizeAzureApiVersion(\r\n resolveOptionalString(versionSource, env, `${target.name} api version`),\r\n );\r\n const temperature = resolveOptionalNumber(temperatureSource, `${target.name} temperature`);\r\n const maxOutputTokens = resolveOptionalNumber(\r\n maxTokensSource,\r\n `${target.name} max output tokens`,\r\n );\r\n const retry = resolveRetryConfig(target);\r\n\r\n return {\r\n resourceName,\r\n deploymentName,\r\n apiKey,\r\n version,\r\n temperature,\r\n maxOutputTokens,\r\n retry,\r\n };\r\n}\r\n\r\nfunction resolveAnthropicConfig(\r\n target: z.infer<typeof BASE_TARGET_SCHEMA>,\r\n env: EnvLookup,\r\n): AnthropicResolvedConfig {\r\n const apiKeySource = target.api_key ?? target.apiKey;\r\n const modelSource = target.model ?? target.deployment ?? target.variant;\r\n const temperatureSource = target.temperature;\r\n const maxTokensSource = target.max_output_tokens ?? target.maxTokens;\r\n const thinkingBudgetSource = target.thinking_budget ?? target.thinkingBudget;\r\n\r\n const apiKey = resolveString(apiKeySource, env, `${target.name} Anthropic api key`);\r\n const model = resolveString(modelSource, env, `${target.name} Anthropic model`);\r\n const retry = resolveRetryConfig(target);\r\n\r\n return {\r\n apiKey,\r\n model,\r\n temperature: resolveOptionalNumber(temperatureSource, `${target.name} temperature`),\r\n maxOutputTokens: resolveOptionalNumber(maxTokensSource, `${target.name} max output tokens`),\r\n thinkingBudget: resolveOptionalNumber(thinkingBudgetSource, `${target.name} thinking budget`),\r\n retry,\r\n };\r\n}\r\n\r\nfunction resolveGeminiConfig(\r\n target: z.infer<typeof BASE_TARGET_SCHEMA>,\r\n env: EnvLookup,\r\n): GeminiResolvedConfig {\r\n const apiKeySource = target.api_key ?? target.apiKey;\r\n const modelSource = target.model ?? target.deployment ?? target.variant;\r\n const temperatureSource = target.temperature;\r\n const maxTokensSource = target.max_output_tokens ?? target.maxTokens;\r\n\r\n const apiKey = resolveString(apiKeySource, env, `${target.name} Google API key`);\r\n const model =\r\n resolveOptionalString(modelSource, env, `${target.name} Gemini model`, {\r\n allowLiteral: true,\r\n optionalEnv: true,\r\n }) ?? \"gemini-2.5-flash\";\r\n const retry = resolveRetryConfig(target);\r\n\r\n return {\r\n apiKey,\r\n model,\r\n temperature: resolveOptionalNumber(temperatureSource, `${target.name} temperature`),\r\n maxOutputTokens: resolveOptionalNumber(maxTokensSource, `${target.name} max output tokens`),\r\n retry,\r\n };\r\n}\r\n\r\nfunction resolveCodexConfig(\r\n target: z.infer<typeof BASE_TARGET_SCHEMA>,\r\n env: EnvLookup,\r\n): CodexResolvedConfig {\r\n const executableSource = target.executable ?? target.command ?? target.binary;\r\n const argsSource = target.args ?? target.arguments;\r\n const cwdSource = target.cwd;\r\n const timeoutSource = target.timeout_seconds ?? target.timeoutSeconds;\r\n const logDirSource = target.log_dir ?? target.logDir ?? target.log_directory ?? target.logDirectory;\r\n const logFormatSource =\r\n target.log_format ??\r\n target.logFormat ??\r\n target.log_output_format ??\r\n target.logOutputFormat ??\r\n env.AGENTV_CODEX_LOG_FORMAT;\r\n\r\n const executable =\r\n resolveOptionalString(executableSource, env, `${target.name} codex executable`, {\r\n allowLiteral: true,\r\n optionalEnv: true,\r\n }) ?? \"codex\";\r\n\r\n const args = resolveOptionalStringArray(argsSource, env, `${target.name} codex args`);\r\n\r\n const cwd = resolveOptionalString(cwdSource, env, `${target.name} codex cwd`, {\r\n allowLiteral: true,\r\n optionalEnv: true,\r\n });\r\n const timeoutMs = resolveTimeoutMs(timeoutSource, `${target.name} codex timeout`);\r\n const logDir = resolveOptionalString(logDirSource, env, `${target.name} codex log directory`, {\r\n allowLiteral: true,\r\n optionalEnv: true,\r\n });\r\n const logFormat = normalizeCodexLogFormat(logFormatSource);\r\n\r\n return {\r\n executable,\r\n args,\r\n cwd,\r\n timeoutMs,\r\n logDir,\r\n logFormat,\r\n };\r\n}\r\n\r\nfunction normalizeCodexLogFormat(value: unknown): \"summary\" | \"json\" | undefined {\r\n if (value === undefined || value === null) {\r\n return undefined;\r\n }\r\n if (typeof value !== \"string\") {\r\n throw new Error(\"codex log format must be 'summary' or 'json'\");\r\n }\r\n const normalized = value.trim().toLowerCase();\r\n if (normalized === \"json\" || normalized === \"summary\") {\r\n return normalized;\r\n }\r\n throw new Error(\"codex log format must be 'summary' or 'json'\");\r\n}\r\n\r\nfunction resolveMockConfig(target: z.infer<typeof BASE_TARGET_SCHEMA>): MockResolvedConfig {\r\n const response = typeof target.response === \"string\" ? target.response : undefined;\r\n return { response };\r\n}\r\n\r\nfunction resolveVSCodeConfig(\r\n target: z.infer<typeof BASE_TARGET_SCHEMA>,\r\n env: EnvLookup,\r\n insiders: boolean,\r\n): VSCodeResolvedConfig {\r\n const workspaceTemplateEnvVar = resolveOptionalLiteralString(target.workspace_template ?? target.workspaceTemplate);\r\n const workspaceTemplate = workspaceTemplateEnvVar\r\n ? resolveOptionalString(workspaceTemplateEnvVar, env, `${target.name} workspace template path`, {\r\n allowLiteral: false,\r\n optionalEnv: true,\r\n })\r\n : undefined;\r\n\r\n const commandSource = target.vscode_cmd ?? target.command;\r\n const waitSource = target.wait;\r\n const dryRunSource = target.dry_run ?? target.dryRun;\r\n const subagentRootSource = target.subagent_root ?? target.subagentRoot;\r\n\r\n const defaultCommand = insiders ? \"code-insiders\" : \"code\";\r\n const command = resolveOptionalLiteralString(commandSource) ?? defaultCommand;\r\n\r\n return {\r\n command,\r\n waitForResponse: resolveOptionalBoolean(waitSource) ?? true,\r\n dryRun: resolveOptionalBoolean(dryRunSource) ?? false,\r\n subagentRoot: resolveOptionalString(subagentRootSource, env, `${target.name} subagent root`, {\r\n allowLiteral: true,\r\n optionalEnv: true,\r\n }),\r\n workspaceTemplate,\r\n };\r\n}\r\n\r\nfunction resolveCliConfig(\r\n target: z.infer<typeof BASE_TARGET_SCHEMA>,\r\n env: EnvLookup,\r\n): CliResolvedConfig {\r\n const commandTemplateSource = target.command_template ?? target.commandTemplate;\r\n const filesFormat = resolveOptionalLiteralString(\r\n target.files_format ??\r\n target.filesFormat ??\r\n target.attachments_format ??\r\n target.attachmentsFormat,\r\n );\r\n const cwd = resolveOptionalString(target.cwd, env, `${target.name} working directory`, {\r\n allowLiteral: true,\r\n optionalEnv: true,\r\n });\r\n const timeoutMs = resolveTimeoutMs(target.timeout_seconds ?? target.timeoutSeconds, `${target.name} timeout`);\r\n const healthcheck = resolveCliHealthcheck(target.healthcheck, env, target.name);\r\n\r\n const commandTemplate = resolveString(\r\n commandTemplateSource,\r\n env,\r\n `${target.name} CLI command template`,\r\n true,\r\n );\r\n assertSupportedCliPlaceholders(commandTemplate, `${target.name} CLI command template`);\r\n\r\n return {\r\n commandTemplate,\r\n filesFormat,\r\n cwd,\r\n timeoutMs,\r\n healthcheck,\r\n };\r\n}\r\n\r\nfunction resolveTimeoutMs(source: unknown, description: string): number | undefined {\r\n const seconds = resolveOptionalNumber(source, `${description} (seconds)`);\r\n if (seconds === undefined) {\r\n return undefined;\r\n }\r\n if (seconds <= 0) {\r\n throw new Error(`${description} must be greater than zero seconds`);\r\n }\r\n return Math.floor(seconds * 1000);\r\n}\r\n\r\nfunction resolveCliHealthcheck(\r\n source: unknown,\r\n env: EnvLookup,\r\n targetName: string,\r\n): CliHealthcheck | undefined {\r\n if (source === undefined || source === null) {\r\n return undefined;\r\n }\r\n if (typeof source !== \"object\" || Array.isArray(source)) {\r\n throw new Error(`${targetName} healthcheck must be an object`);\r\n }\r\n\r\n const candidate = source as Record<string, unknown>;\r\n const type = candidate.type;\r\n const timeoutMs = resolveTimeoutMs(\r\n candidate.timeout_seconds ?? candidate.timeoutSeconds,\r\n `${targetName} healthcheck timeout`,\r\n );\r\n\r\n if (type === \"http\") {\r\n const url = resolveString(candidate.url, env, `${targetName} healthcheck URL`);\r\n return {\r\n type: \"http\",\r\n url,\r\n timeoutMs,\r\n };\r\n }\r\n\r\n if (type === \"command\") {\r\n const commandTemplate = resolveString(\r\n candidate.command_template ?? candidate.commandTemplate,\r\n env,\r\n `${targetName} healthcheck command template`,\r\n true,\r\n );\r\n assertSupportedCliPlaceholders(commandTemplate, `${targetName} healthcheck command template`);\r\n const cwd = resolveOptionalString(candidate.cwd, env, `${targetName} healthcheck cwd`, {\r\n allowLiteral: true,\r\n optionalEnv: true,\r\n });\r\n return {\r\n type: \"command\",\r\n commandTemplate,\r\n timeoutMs,\r\n cwd,\r\n };\r\n }\r\n\r\n throw new Error(`${targetName} healthcheck type must be 'http' or 'command'`);\r\n}\r\n\r\nfunction assertSupportedCliPlaceholders(template: string, description: string): void {\r\n const placeholders = extractCliPlaceholders(template);\r\n for (const placeholder of placeholders) {\r\n if (!CLI_PLACEHOLDERS.has(placeholder)) {\r\n throw new Error(\r\n `${description} includes unsupported placeholder '{${placeholder}}'. Supported placeholders: ${Array.from(CLI_PLACEHOLDERS).join(\", \")}`,\r\n );\r\n }\r\n }\r\n}\r\n\r\nfunction extractCliPlaceholders(template: string): string[] {\r\n const matches = template.matchAll(/\\{([A-Z_]+)\\}/g);\r\n const results: string[] = [];\r\n for (const match of matches) {\r\n if (match[1]) {\r\n results.push(match[1]);\r\n }\r\n }\r\n return results;\r\n}\r\n\r\nfunction resolveString(\r\n source: unknown,\r\n env: EnvLookup,\r\n description: string,\r\n allowLiteral = false,\r\n): string {\r\n const value = resolveOptionalString(source, env, description, {\r\n allowLiteral,\r\n optionalEnv: false,\r\n });\r\n if (value === undefined) {\r\n throw new Error(`${description} is required`);\r\n }\r\n return value;\r\n}\r\n\r\nfunction resolveOptionalString(\r\n source: unknown,\r\n env: EnvLookup,\r\n description: string,\r\n options?: { allowLiteral?: boolean; optionalEnv?: boolean },\r\n): string | undefined {\r\n if (source === undefined || source === null) {\r\n return undefined;\r\n }\r\n if (typeof source !== \"string\") {\r\n throw new Error(`${description} must be a string`);\r\n }\r\n const trimmed = source.trim();\r\n if (trimmed.length === 0) {\r\n return undefined;\r\n }\r\n\r\n // Check for ${{ variable }} syntax\r\n const envVarMatch = trimmed.match(/^\\$\\{\\{\\s*([A-Z0-9_]+)\\s*\\}\\}$/i);\r\n if (envVarMatch) {\r\n const varName = envVarMatch[1];\r\n const envValue = env[varName];\r\n if (envValue !== undefined) {\r\n if (envValue.trim().length === 0) {\r\n throw new Error(`Environment variable '${varName}' for ${description} is empty`);\r\n }\r\n return envValue;\r\n }\r\n const optionalEnv = options?.optionalEnv ?? false;\r\n if (optionalEnv) {\r\n return undefined;\r\n }\r\n throw new Error(`Environment variable '${varName}' required for ${description} is not set`);\r\n }\r\n\r\n // Return as literal value\r\n const allowLiteral = options?.allowLiteral ?? false;\r\n if (!allowLiteral) {\r\n throw new Error(`${description} must use \\${{ VARIABLE_NAME }} syntax for environment variables or be marked as allowing literals`);\r\n }\r\n return trimmed;\r\n}\r\n\r\nfunction resolveOptionalLiteralString(source: unknown): string | undefined {\r\n if (source === undefined || source === null) {\r\n return undefined;\r\n }\r\n if (typeof source !== \"string\") {\r\n throw new Error(\"expected string value\");\r\n }\r\n const trimmed = source.trim();\r\n return trimmed.length > 0 ? trimmed : undefined;\r\n}\r\n\r\nfunction resolveOptionalNumber(source: unknown, description: string): number | undefined {\r\n if (source === undefined || source === null || source === \"\") {\r\n return undefined;\r\n }\r\n if (typeof source === \"number\") {\r\n return Number.isFinite(source) ? source : undefined;\r\n }\r\n if (typeof source === \"string\") {\r\n const numeric = Number(source);\r\n if (Number.isFinite(numeric)) {\r\n return numeric;\r\n }\r\n }\r\n throw new Error(`${description} must be a number`);\r\n}\r\n\r\nfunction resolveOptionalBoolean(source: unknown): boolean | undefined {\r\n if (source === undefined || source === null || source === \"\") {\r\n return undefined;\r\n }\r\n if (typeof source === \"boolean\") {\r\n return source;\r\n }\r\n if (typeof source === \"string\") {\r\n const lowered = source.trim().toLowerCase();\r\n if (lowered === \"true\" || lowered === \"1\") {\r\n return true;\r\n }\r\n if (lowered === \"false\" || lowered === \"0\") {\r\n return false;\r\n }\r\n }\r\n throw new Error(\"expected boolean value\");\r\n}\r\n\r\nfunction resolveOptionalStringArray(\r\n source: unknown,\r\n env: EnvLookup,\r\n description: string,\r\n): readonly string[] | undefined {\r\n if (source === undefined || source === null) {\r\n return undefined;\r\n }\r\n if (!Array.isArray(source)) {\r\n throw new Error(`${description} must be an array of strings`);\r\n }\r\n if (source.length === 0) {\r\n return undefined;\r\n }\r\n const resolved: string[] = [];\r\n for (let i = 0; i < source.length; i++) {\r\n const item = source[i];\r\n if (typeof item !== \"string\") {\r\n throw new Error(`${description}[${i}] must be a string`);\r\n }\r\n const trimmed = item.trim();\r\n if (trimmed.length === 0) {\r\n throw new Error(`${description}[${i}] cannot be empty`);\r\n }\r\n\r\n // Check for ${{ variable }} syntax\r\n const envVarMatch = trimmed.match(/^\\$\\{\\{\\s*([A-Z0-9_]+)\\s*\\}\\}$/i);\r\n if (envVarMatch) {\r\n const varName = envVarMatch[1];\r\n const envValue = env[varName];\r\n if (envValue !== undefined) {\r\n if (envValue.trim().length === 0) {\r\n throw new Error(`Environment variable '${varName}' for ${description}[${i}] is empty`);\r\n }\r\n resolved.push(envValue);\r\n continue;\r\n }\r\n throw new Error(`Environment variable '${varName}' for ${description}[${i}] is not set`);\r\n }\r\n\r\n // Treat as literal value\r\n resolved.push(trimmed);\r\n }\r\n return resolved.length > 0 ? resolved : undefined;\r\n}\r\n\r\nfunction resolveOptionalNumberArray(\r\n source: unknown,\r\n description: string,\r\n): readonly number[] | undefined {\r\n if (source === undefined || source === null) {\r\n return undefined;\r\n }\r\n if (!Array.isArray(source)) {\r\n throw new Error(`${description} must be an array of numbers`);\r\n }\r\n if (source.length === 0) {\r\n return undefined;\r\n }\r\n const resolved: number[] = [];\r\n for (let i = 0; i < source.length; i++) {\r\n const item = source[i];\r\n if (typeof item !== \"number\" || !Number.isFinite(item)) {\r\n throw new Error(`${description}[${i}] must be a number`);\r\n }\r\n resolved.push(item);\r\n }\r\n return resolved.length > 0 ? resolved : undefined;\r\n}\r\n","import type { AxChatRequest, AxAI } from \"@ax-llm/ax\";\r\n\r\nimport type { JsonObject } from \"../types.js\";\r\n\r\nexport type ChatPrompt = AxChatRequest[\"chatPrompt\"];\r\n\r\nexport type ProviderKind =\r\n | \"azure\"\r\n | \"anthropic\"\r\n | \"gemini\"\r\n | \"codex\"\r\n | \"cli\"\r\n | \"mock\"\r\n | \"vscode\"\r\n | \"vscode-insiders\";\r\n\r\n/**\r\n * Agent providers that have filesystem access and don't need unwrapped guidelines.\r\n * These providers read files directly from the filesystem using file:// URIs.\r\n */\r\nexport const AGENT_PROVIDER_KINDS: readonly ProviderKind[] = [\r\n \"codex\",\r\n \"vscode\",\r\n \"vscode-insiders\",\r\n] as const;\r\n\r\n/**\r\n * List of all supported provider kinds.\r\n * This is the source of truth for provider validation.\r\n */\r\nexport const KNOWN_PROVIDERS: readonly ProviderKind[] = [\r\n \"azure\",\r\n \"anthropic\",\r\n \"gemini\",\r\n \"codex\",\r\n \"cli\",\r\n \"mock\",\r\n \"vscode\",\r\n \"vscode-insiders\",\r\n] as const;\r\n\r\n/**\r\n * Provider aliases that are accepted in target definitions.\r\n * These map to the canonical ProviderKind values.\r\n */\r\nexport const PROVIDER_ALIASES: readonly string[] = [\r\n \"azure-openai\", // alias for \"azure\"\r\n \"google\", // alias for \"gemini\"\r\n \"google-gemini\", // alias for \"gemini\"\r\n \"codex-cli\", // alias for \"codex\"\r\n \"openai\", // legacy/future support\r\n \"bedrock\", // legacy/future support\r\n \"vertex\", // legacy/future support\r\n] as const;\r\n\r\n/**\r\n * Schema identifier for targets.yaml files (version 2).\r\n */\r\nexport const TARGETS_SCHEMA_V2 = \"agentv-targets-v2.2\";\r\n\r\nexport interface ProviderRequest {\r\n readonly question: string;\r\n readonly guidelines?: string;\r\n readonly guideline_patterns?: readonly string[];\r\n readonly chatPrompt?: ChatPrompt;\r\n readonly inputFiles?: readonly string[];\r\n readonly evalCaseId?: string;\r\n readonly attempt?: number;\r\n readonly maxOutputTokens?: number;\r\n readonly temperature?: number;\r\n readonly metadata?: JsonObject;\r\n readonly signal?: AbortSignal;\r\n}\r\n\r\nexport interface ProviderResponse {\r\n readonly text: string;\r\n readonly reasoning?: string;\r\n readonly raw?: unknown;\r\n readonly usage?: JsonObject;\r\n}\r\n\r\n/**\r\n * Type guard to check if a provider is an agent provider with filesystem access.\r\n * Agent providers read files directly and don't need unwrapped guideline content.\r\n */\r\nexport function isAgentProvider(provider: Provider | undefined): boolean {\r\n return provider ? AGENT_PROVIDER_KINDS.includes(provider.kind) : false;\r\n}\r\n\r\nexport interface Provider {\r\n readonly id: string;\r\n readonly kind: ProviderKind;\r\n readonly targetName: string;\r\n invoke(request: ProviderRequest): Promise<ProviderResponse>;\r\n /**\r\n * Optional capability marker for provider-managed batching (single session handling multiple requests).\r\n */\r\n readonly supportsBatch?: boolean;\r\n /**\r\n * Optional batch invocation hook. When defined alongside supportsBatch=true,\r\n * the orchestrator may send multiple requests in a single provider session.\r\n */\r\n invokeBatch?(requests: readonly ProviderRequest[]): Promise<readonly ProviderResponse[]>;\r\n /**\r\n * Optional access to the underlying AxAI instance.\r\n * This enables using advanced Ax features like structured output signatures.\r\n */\r\n getAxAI?(): AxAI;\r\n}\r\n\r\nexport type EnvLookup = Readonly<Record<string, string | undefined>>;\r\n\r\nexport interface TargetDefinition {\r\n readonly name: string;\r\n readonly provider: ProviderKind | string;\r\n readonly judge_target?: string | undefined;\r\n readonly workers?: number | undefined;\r\n // Provider batching\r\n readonly provider_batching?: boolean | undefined;\r\n readonly providerBatching?: boolean | undefined;\r\n // Azure fields\r\n readonly endpoint?: string | unknown | undefined;\r\n readonly resource?: string | unknown | undefined;\r\n readonly resourceName?: string | unknown | undefined;\r\n readonly api_key?: string | unknown | undefined;\r\n readonly apiKey?: string | unknown | undefined;\r\n readonly deployment?: string | unknown | undefined;\r\n readonly deploymentName?: string | unknown | undefined;\r\n readonly model?: string | unknown | undefined;\r\n readonly version?: string | unknown | undefined;\r\n readonly api_version?: string | unknown | undefined;\r\n // Anthropic fields\r\n readonly variant?: string | unknown | undefined;\r\n readonly thinking_budget?: number | unknown | undefined;\r\n readonly thinkingBudget?: number | unknown | undefined;\r\n // Common fields\r\n readonly temperature?: number | unknown | undefined;\r\n readonly max_output_tokens?: number | unknown | undefined;\r\n readonly maxTokens?: number | unknown | undefined;\r\n // Codex fields\r\n readonly executable?: string | unknown | undefined;\r\n readonly command?: string | unknown | undefined;\r\n readonly binary?: string | unknown | undefined;\r\n readonly args?: unknown | undefined;\r\n readonly arguments?: unknown | undefined;\r\n readonly cwd?: string | unknown | undefined;\r\n readonly timeout_seconds?: number | unknown | undefined;\r\n readonly timeoutSeconds?: number | unknown | undefined;\r\n readonly log_dir?: string | unknown | undefined;\r\n readonly logDir?: string | unknown | undefined;\r\n readonly log_directory?: string | unknown | undefined;\r\n readonly logDirectory?: string | unknown | undefined;\r\n readonly log_format?: string | unknown | undefined;\r\n readonly logFormat?: string | unknown | undefined;\r\n readonly log_output_format?: string | unknown | undefined;\r\n readonly logOutputFormat?: string | unknown | undefined;\r\n // Mock fields\r\n readonly response?: string | unknown | undefined;\r\n readonly delayMs?: number | unknown | undefined;\r\n readonly delayMinMs?: number | unknown | undefined;\r\n readonly delayMaxMs?: number | unknown | undefined;\r\n // VSCode fields\r\n readonly vscode_cmd?: string | unknown | undefined;\r\n readonly wait?: boolean | unknown | undefined;\r\n readonly dry_run?: boolean | unknown | undefined;\r\n readonly dryRun?: boolean | unknown | undefined;\r\n readonly subagent_root?: string | unknown | undefined;\r\n readonly subagentRoot?: string | unknown | undefined;\r\n readonly workspace_template?: string | unknown | undefined;\r\n readonly workspaceTemplate?: string | unknown | undefined;\r\n // CLI fields\r\n readonly command_template?: string | unknown | undefined;\r\n readonly commandTemplate?: string | unknown | undefined;\r\n readonly files_format?: string | unknown | undefined;\r\n readonly filesFormat?: string | unknown | undefined;\r\n readonly attachments_format?: string | unknown | undefined;\r\n readonly attachmentsFormat?: string | unknown | undefined;\r\n readonly env?: unknown | undefined;\r\n readonly healthcheck?: unknown | undefined;\r\n // Retry configuration fields\r\n readonly max_retries?: number | unknown | undefined;\r\n readonly maxRetries?: number | unknown | undefined;\r\n readonly retry_initial_delay_ms?: number | unknown | undefined;\r\n readonly retryInitialDelayMs?: number | unknown | undefined;\r\n readonly retry_max_delay_ms?: number | unknown | undefined;\r\n readonly retryMaxDelayMs?: number | unknown | undefined;\r\n readonly retry_backoff_factor?: number | unknown | undefined;\r\n readonly retryBackoffFactor?: number | unknown | undefined;\r\n readonly retry_status_codes?: unknown | undefined;\r\n readonly retryStatusCodes?: unknown | undefined;\r\n}\r\n"],"mappings":"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","names":[]}