@agentv/core 0.7.4 → 0.9.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.
- package/dist/{chunk-L6RCDZ4Z.js → chunk-SNTZFB24.js} +102 -68
- package/dist/chunk-SNTZFB24.js.map +1 -0
- package/dist/evaluation/validation/index.cjs +32 -57
- package/dist/evaluation/validation/index.cjs.map +1 -1
- package/dist/evaluation/validation/index.js +31 -55
- package/dist/evaluation/validation/index.js.map +1 -1
- package/dist/index.cjs +211 -107
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +81 -3
- package/dist/index.d.ts +81 -3
- package/dist/index.js +112 -41
- package/dist/index.js.map +1 -1
- package/package.json +1 -2
- package/dist/chunk-L6RCDZ4Z.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentv/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Primitive runtime components for AgentV",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -31,7 +31,6 @@
|
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@ax-llm/ax": "^15.0.2",
|
|
34
|
-
"ai": "^5.0.50",
|
|
35
34
|
"micromatch": "^4.0.8",
|
|
36
35
|
"subagent": "^0.4.7",
|
|
37
36
|
"yaml": "^2.6.0",
|
|
@@ -1 +0,0 @@
|
|
|
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 * 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 content.replace(/\\r\\n/g, \"\\n\");\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 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}\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}\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}\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 env?: Record<string, 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 settings: z.record(z.unknown()).optional(),\r\n judge_target: z.string().optional(),\r\n workers: z.number().int().min(1).optional(),\r\n});\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\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.settings?.provider_batching ?? parsed.settings?.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 settings = target.settings ?? {};\r\n const endpointSource = settings.endpoint ?? settings.resource ?? settings.resourceName;\r\n const apiKeySource = settings.api_key ?? settings.apiKey;\r\n const deploymentSource = settings.deployment ?? settings.deploymentName ?? settings.model;\r\n const versionSource = settings.version ?? settings.api_version;\r\n const temperatureSource = settings.temperature;\r\n const maxTokensSource = settings.max_output_tokens ?? settings.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\r\n return {\r\n resourceName,\r\n deploymentName,\r\n apiKey,\r\n version,\r\n temperature,\r\n maxOutputTokens,\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 settings = target.settings ?? {};\r\n const apiKeySource = settings.api_key ?? settings.apiKey;\r\n const modelSource = settings.model ?? settings.deployment ?? settings.variant;\r\n const temperatureSource = settings.temperature;\r\n const maxTokensSource = settings.max_output_tokens ?? settings.maxTokens;\r\n const thinkingBudgetSource = settings.thinking_budget ?? settings.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\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 };\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 settings = target.settings ?? {};\r\n const apiKeySource = settings.api_key ?? settings.apiKey;\r\n const modelSource = settings.model ?? settings.deployment ?? settings.variant;\r\n const temperatureSource = settings.temperature;\r\n const maxTokensSource = settings.max_output_tokens ?? settings.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\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 };\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 settings = target.settings ?? {};\r\n const executableSource = settings.executable ?? settings.command ?? settings.binary;\r\n const argsSource = settings.args ?? settings.arguments;\r\n const cwdSource = settings.cwd;\r\n const timeoutSource = settings.timeout_seconds ?? settings.timeoutSeconds;\r\n const logDirSource = settings.log_dir ?? settings.logDir ?? settings.log_directory ?? settings.logDirectory;\r\n const logFormatSource =\r\n settings.log_format ??\r\n settings.logFormat ??\r\n settings.log_output_format ??\r\n settings.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 settings = target.settings ?? {};\r\n const response = typeof settings.response === \"string\" ? settings.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 settings = target.settings ?? {};\r\n const workspaceTemplateEnvVar = resolveOptionalLiteralString(settings.workspace_template ?? settings.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 = settings.vscode_cmd ?? settings.command;\r\n const waitSource = settings.wait;\r\n const dryRunSource = settings.dry_run ?? settings.dryRun;\r\n const subagentRootSource = settings.subagent_root ?? settings.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 settings = target.settings ?? {};\r\n const commandTemplateSource = settings.command_template ?? settings.commandTemplate;\r\n const filesFormat = resolveOptionalLiteralString(\r\n settings.files_format ??\r\n settings.filesFormat ??\r\n settings.attachments_format ??\r\n settings.attachmentsFormat,\r\n );\r\n const cwd = resolveOptionalString(settings.cwd, env, `${target.name} working directory`, {\r\n allowLiteral: true,\r\n optionalEnv: true,\r\n });\r\n const envOverrides = resolveEnvOverrides(settings.env, env, target.name);\r\n const timeoutMs = resolveTimeoutMs(settings.timeout_seconds ?? settings.timeoutSeconds, `${target.name} timeout`);\r\n const healthcheck = resolveCliHealthcheck(settings.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 env: envOverrides,\r\n timeoutMs,\r\n healthcheck,\r\n };\r\n}\r\n\r\nfunction resolveEnvOverrides(\r\n source: unknown,\r\n env: EnvLookup,\r\n targetName: string,\r\n): Record<string, string> | 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} env overrides must be an object map of strings`);\r\n }\r\n\r\n const entries = Object.entries(source as Record<string, unknown>);\r\n const resolved: Record<string, string> = {};\r\n for (const [key, value] of entries) {\r\n if (typeof value !== \"string\") {\r\n throw new Error(`${targetName} env override '${key}' must be a string`);\r\n }\r\n const resolvedValue = resolveString(value, env, `${targetName} env override '${key}'`);\r\n resolved[key] = resolvedValue;\r\n }\r\n return Object.keys(resolved).length > 0 ? resolved : undefined;\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","import type { AxChatRequest, AxAI } from \"@ax-llm/ax\";\r\n\r\nimport type { JsonObject } from \"../types.js\";\r\n\r\ntype 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.1\";\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 settings?: Record<string, unknown> | undefined;\r\n readonly judge_target?: string | undefined;\r\n readonly workers?: number | undefined;\r\n}\r\n"],"mappings":"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","names":[]}
|