agentv 5.3.1-next.1 → 5.3.2-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.
Files changed (66) hide show
  1. package/README.md +52 -44
  2. package/dist/{artifact-writer-7NBCOAYC.js → artifact-writer-KJEOROKQ.js} +5 -5
  3. package/dist/{chunk-ELCJ23K4.js → chunk-6262OKXM.js} +2856 -2404
  4. package/dist/chunk-6262OKXM.js.map +1 -0
  5. package/dist/chunk-AQ5BIAXF.js +604 -0
  6. package/dist/chunk-AQ5BIAXF.js.map +1 -0
  7. package/dist/chunk-BV5VQLI2.js +2 -0
  8. package/dist/{chunk-LXBI3SPX.js → chunk-JGSRUJZQ.js} +46 -20
  9. package/dist/chunk-JGSRUJZQ.js.map +1 -0
  10. package/dist/chunk-MMDLXYBX.js +721 -0
  11. package/dist/chunk-MMDLXYBX.js.map +1 -0
  12. package/dist/{chunk-LKGARI3W.js → chunk-QSK3PC44.js} +812 -570
  13. package/dist/chunk-QSK3PC44.js.map +1 -0
  14. package/dist/chunk-TEEXVJWM.js +2 -0
  15. package/dist/{chunk-RKE7SSET.js → chunk-WIAJ7JAV.js} +186 -64
  16. package/dist/chunk-WIAJ7JAV.js.map +1 -0
  17. package/dist/cli.d.ts +1 -0
  18. package/dist/cli.js +17517 -10
  19. package/dist/cli.js.map +1 -1
  20. package/dist/config.d.ts +2 -0
  21. package/dist/config.js +14 -0
  22. package/dist/config.js.map +1 -0
  23. package/dist/contracts-DsZmZLl8.d.ts +742 -0
  24. package/dist/contracts.d.ts +2 -0
  25. package/dist/contracts.js +28 -0
  26. package/dist/contracts.js.map +1 -0
  27. package/dist/dashboard/assets/{index-CbEMiJSb.js → index-BfqOlLOF.js} +1 -1
  28. package/dist/dashboard/assets/index-Bh8lpGce.css +1 -0
  29. package/dist/dashboard/assets/index-oPR3ywQb.js +121 -0
  30. package/dist/dashboard/index.html +2 -2
  31. package/dist/{dist-NMXMI5SK.js → dist-A3SGR7TW.js} +16 -16
  32. package/dist/dist-A3SGR7TW.js.map +1 -0
  33. package/dist/index.d.ts +4 -0
  34. package/dist/index.js +137 -18
  35. package/dist/{interactive-BN527UV3.js → interactive-DL7N2C7K.js} +24 -24
  36. package/dist/interactive-DL7N2C7K.js.map +1 -0
  37. package/dist/provider.d.ts +2 -0
  38. package/dist/provider.js +24 -0
  39. package/dist/provider.js.map +1 -0
  40. package/dist/sdk.d.ts +802 -0
  41. package/dist/sdk.js +145 -0
  42. package/dist/sdk.js.map +1 -0
  43. package/dist/skills/agentv-eval-migrations/references/breaking-changes.md +17 -18
  44. package/dist/skills/agentv-eval-writer/SKILL.md +27 -15
  45. package/dist/skills/agentv-eval-writer/references/custom-evaluators.md +5 -5
  46. package/dist/skills/agentv-eval-writer/references/eval.schema.json +5402 -4639
  47. package/dist/skills/agentv-eval-writer/references/python-helpers.md +2 -2
  48. package/dist/skills/agentv-eval-writer/references/rubric-evaluator.md +19 -2
  49. package/dist/templates/.agentv/providers.yaml +42 -0
  50. package/dist/templates/.env.example +2 -2
  51. package/dist/{ts-eval-loader-2RFVZHCT-7CZ3DCDD.js → ts-eval-loader-3G5GEAEC-6F52JLPP.js} +3 -3
  52. package/dist/ts-eval-loader-3G5GEAEC-6F52JLPP.js.map +1 -0
  53. package/package.json +29 -4
  54. package/dist/chunk-ASIGJIOJ.js +0 -17993
  55. package/dist/chunk-ASIGJIOJ.js.map +0 -1
  56. package/dist/chunk-ELCJ23K4.js.map +0 -1
  57. package/dist/chunk-LKGARI3W.js.map +0 -1
  58. package/dist/chunk-LXBI3SPX.js.map +0 -1
  59. package/dist/chunk-RKE7SSET.js.map +0 -1
  60. package/dist/dashboard/assets/index-DTA6-l7q.js +0 -121
  61. package/dist/dashboard/assets/index-D_bokML8.css +0 -1
  62. package/dist/interactive-BN527UV3.js.map +0 -1
  63. package/dist/templates/.agentv/targets.yaml +0 -97
  64. /package/dist/{artifact-writer-7NBCOAYC.js.map → artifact-writer-KJEOROKQ.js.map} +0 -0
  65. /package/dist/{dist-NMXMI5SK.js.map → chunk-BV5VQLI2.js.map} +0 -0
  66. /package/dist/{ts-eval-loader-2RFVZHCT-7CZ3DCDD.js.map → chunk-TEEXVJWM.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../packages/sdk/src/schemas.ts","../../../packages/sdk/src/index.ts","../../../packages/sdk/src/eval.ts","../../../packages/sdk/src/graders.ts","../../../packages/sdk/src/provider-client.ts","../../../packages/sdk/src/workspace.ts","../../../packages/sdk/src/runtime.ts","../../../packages/sdk/src/vitest.ts","../../../packages/sdk/src/assertion.ts","../../../packages/sdk/src/deprecation.ts","../../../packages/sdk/src/prompt-template.ts"],"sourcesContent":["export {\n CodeGraderInputSchema,\n CodeGraderResultSchema,\n CodeJudgeInputSchema,\n CodeJudgeResultSchema,\n ContentFileSchema,\n ContentImageSchema,\n ContentSchema,\n ContentTextSchema,\n MessageSchema,\n PromptTemplateInputSchema,\n ScriptGraderCheckSchema,\n ScriptGraderInputSchema,\n ScriptGraderResultSchema,\n TokenUsageSchema,\n TRACE_EVENT_TYPES,\n TRACE_REDACTION_LEVELS,\n TRACE_SOURCE_KINDS,\n TRACE_TOOL_STATUSES,\n ToolCallSchema,\n TraceArtifactSchema,\n TraceBranchSchema,\n TraceErrorSchema,\n TraceEventSchema,\n TraceMessageSchema,\n TraceModelSchema,\n TraceRawEvidenceSchema,\n TraceRedactionStateSchema,\n TraceSchema,\n TraceSessionSchema,\n TraceSourceRefSchema,\n TraceSourceSchema,\n TraceSummarySchema,\n TraceToolSchema,\n type CodeGraderInput,\n type CodeGraderResult,\n type CodeJudgeInput,\n type CodeJudgeResult,\n type Content,\n type ContentFile,\n type ContentImage,\n type ContentText,\n type Message,\n type PromptTemplateInput,\n type ScriptGraderCheck,\n type ScriptGraderInput,\n type ScriptGraderResult,\n type TokenUsage,\n type ToolCall,\n type Trace,\n type TraceArtifact,\n type TraceBranch,\n type TraceError,\n type TraceEvent,\n type TraceMessage,\n type TraceModel,\n type TraceRawEvidence,\n type TraceRedactionState,\n type TraceSession,\n type TraceSource,\n type TraceSourceRef,\n type TraceSummary,\n type TraceTool,\n} from '@agentv/core/script-grader';\n","/**\n * AgentV Evaluation SDK\n *\n * Build custom assertions, script graders, and eval authoring helpers for AI agent outputs.\n *\n * @example Custom assertion (simplest way to add evaluation logic)\n * ```typescript\n * #!/usr/bin/env bun\n * import { defineAssertion } from 'agentv';\n *\n * export default defineAssertion(({ output, criteria }) => {\n * const answer = output ?? '';\n * return {\n * pass: answer.includes('hello'),\n * score: answer.includes('hello') ? 1 : 0,\n * reason: answer.includes('hello') ? 'Greeting found' : 'Greeting missing',\n * };\n * }));\n * ```\n *\n * @example script grader (full control)\n * ```typescript\n * #!/usr/bin/env bun\n * import { defineScriptGrader } from 'agentv';\n *\n * export default defineScriptGrader(({ output, traceSummary }) => {\n * return {\n * score: (output ?? '').length > 0 && (traceSummary?.eventCount ?? 0) <= 5 ? 1.0 : 0.5,\n * pass: (output ?? '').length > 0 && (traceSummary?.eventCount ?? 0) <= 5,\n * reason: 'Checks answer text and trace size',\n * checks: [\n * { text: 'Answer is not empty', pass: (output ?? '').length > 0, reason: 'Output text is present' },\n * { text: 'Efficient tool usage', pass: (traceSummary?.eventCount ?? 0) <= 5, reason: 'Trace event count is within limit' },\n * ],\n * };\n * }));\n * ```\n *\n * @example Vitest workspace verifier adapter (custom wrapper form)\n * ```typescript\n * #!/usr/bin/env bun\n * import { defineVitestWorkspaceGrader } from 'agentv';\n *\n * export default defineVitestWorkspaceGrader({\n * testFile: 'graders/welcome-banner.test.ts',\n * copyTestFilesToWorkspace: true,\n * });\n * ```\n *\n * @example Workspace grader (small file checks)\n * ```typescript\n * #!/usr/bin/env bun\n * import { defineWorkspaceGrader } from 'agentv';\n *\n * export default defineWorkspaceGrader(async ({ workspace }) => [\n * await workspace.file('app/page.tsx').contains('Status: All systems ready'),\n * await workspace.file('app/page.tsx').contains('Open dashboard'),\n * await workspace.file('app/page.tsx').matches(/href=[\"']\\/dashboard[\"']/),\n * await workspace.file('app/page.tsx').notMatches(/TODO/i),\n * ]);\n * ```\n *\n * @packageDocumentation\n */\n\n// Re-export schemas and types\nexport {\n ScriptGraderInputSchema,\n ScriptGraderCheckSchema,\n ScriptGraderResultSchema,\n CodeGraderInputSchema,\n CodeGraderResultSchema,\n TRACE_REDACTION_LEVELS,\n TRACE_SOURCE_KINDS,\n TRACE_EVENT_TYPES,\n TRACE_TOOL_STATUSES,\n TraceSummarySchema,\n TraceSchema,\n TraceArtifactSchema,\n TraceRawEvidenceSchema,\n TraceRedactionStateSchema,\n TraceBranchSchema,\n TraceErrorSchema,\n TraceEventSchema,\n TraceMessageSchema,\n TraceModelSchema,\n TraceSessionSchema,\n TraceSourceRefSchema,\n TraceSourceSchema,\n TraceToolSchema,\n MessageSchema,\n ToolCallSchema,\n TokenUsageSchema,\n PromptTemplateInputSchema,\n ContentTextSchema,\n ContentImageSchema,\n ContentFileSchema,\n ContentSchema,\n type ScriptGraderInput,\n type ScriptGraderCheck,\n type ScriptGraderResult,\n type CodeGraderInput,\n type CodeGraderResult,\n type TraceArtifact,\n type TraceRawEvidence,\n type TraceRedactionState,\n type TraceBranch,\n type TraceError,\n type TraceEvent,\n type TraceMessage,\n type TraceModel,\n type TraceSession,\n type TraceSource,\n type TraceSourceRef,\n type TraceTool,\n type TraceSummary,\n type Trace,\n type Message,\n type ToolCall,\n type TokenUsage,\n type PromptTemplateInput,\n type ContentText,\n type ContentImage,\n type ContentFile,\n type Content,\n} from './schemas.js';\n\n// Re-export YAML-aligned eval authoring helpers\nexport {\n evaluate,\n type AssertEntry,\n type ConversationTurnInput,\n type EvalAssertionInput,\n type EvalRunArtifacts,\n type EvalRunResult,\n type EvalSummary,\n type EvalTestInput,\n} from '@agentv/core';\n\nexport {\n defineEval,\n serializeEvalYaml,\n toEvalYamlObject,\n type DefinedEvalSuite,\n type EvalAssertionConfig,\n type EvalConfig,\n type EvalDockerEnvironment,\n type EvalDockerEnvironmentMount,\n type EvalDockerEnvironmentResources,\n type EvalDefaultTest,\n type EvalEnvironment,\n type EvalEnvironmentSetup,\n type EvalExecution,\n type EvalHostEnvironment,\n type EvalLifecycleHook,\n type EvalLifecycleHooks,\n type EvalMessage,\n type EvalMessageContent,\n type EvalProviderConfig,\n type EvalProviderEntry,\n type EvalProviderMap,\n type EvalProviderRef,\n type EvalRepeat,\n type EvalRequires,\n type EvalTest,\n type EvalTestOptions,\n type EvalTurn,\n type LowerEvalYamlValue,\n} from './eval.js';\n\n// Re-export grader config helpers\nexport {\n codeGrader,\n containsGrader,\n equalsGrader,\n exactGrader,\n graders,\n isJsonGrader,\n jsonGrader,\n llmRubricGrader,\n regexGrader,\n scriptGrader,\n type ScriptGraderConfig,\n type ScriptGraderOptions,\n type ScriptGraderProviderOptions,\n type ScriptGraderTargetOptions,\n type CodeGraderConfig,\n type CodeGraderOptions,\n type CodeGraderTargetOptions,\n type ContainsGraderConfig,\n type EqualsGraderConfig,\n type GraderCatalog,\n type GraderCommand,\n type GraderCommonConfig,\n type GraderHelperConfig,\n type GraderHelperOptions,\n type GraderPromptScriptConfig,\n type GraderRubric,\n type GraderRubricCriterion,\n type GraderRubricOperator,\n type GraderScoreRange,\n type IsJsonGraderConfig,\n type LlmRubricGraderConfig,\n type RegexGraderConfig,\n type RegexGraderOptions,\n} from './graders.js';\n\n// Re-export provider client\nexport {\n createProviderClient,\n ProviderNotAvailableError,\n ProviderInvocationError,\n type ProviderClient,\n type ProviderInfo,\n type ProviderInvokeRequest,\n type ProviderInvokeResponse,\n} from './provider-client.js';\n\n// Re-export workspace grader helpers\nexport {\n createWorkspace,\n defineWorkspaceGrader,\n normalizeWorkspaceGraderResult,\n runWorkspaceGrader,\n type Workspace,\n type WorkspaceAssertion,\n type WorkspaceCheck,\n type WorkspaceFile,\n type WorkspaceFileAssertionOptions,\n type WorkspaceGraderContext,\n type WorkspaceGraderHandler,\n type WorkspaceGraderReturn,\n} from './workspace.js';\n\n// Re-export Vitest workspace verifier adapter\nexport {\n defineVitestWorkspaceGrader,\n runVitestWorkspaceGrader,\n vitestReportToScriptGraderResult,\n vitestReportToCodeGraderResult,\n type VitestWorkspaceGraderOptions,\n} from './vitest.js';\n\n// Re-export Zod for typed config support\nexport { z } from 'zod';\n\n// Re-export assertion types\nexport type {\n AssertionCheck,\n AssertionContext,\n AssertionHandler,\n AssertionScore,\n AssertionType,\n} from './assertion.js';\n\nimport { type AssertionHandler, runAssertion } from './assertion.js';\nimport { type PromptTemplateHandler, runPromptTemplate } from './prompt-template.js';\nimport {\n type CodeGraderHandler,\n type ScriptGraderHandler,\n runCodeGrader,\n runScriptGrader,\n} from './runtime.js';\n\nexport { runCodeGrader, runScriptGrader };\nexport type { CodeGraderHandler, ScriptGraderHandler };\nexport type { PromptTemplateHandler };\n\n/**\n * Define a script grader with automatic stdin/stdout handling.\n *\n * This function:\n * 1. Reads JSON from stdin (snake_case format)\n * 2. Converts to camelCase and validates with Zod\n * 3. Calls your handler with typed input\n * 4. Validates the result and outputs JSON to stdout\n * 5. Handles errors gracefully with proper exit codes\n *\n * @param handler - Function that evaluates the input and returns a result\n *\n * @example\n * ```typescript\n * import { defineScriptGrader } from 'agentv';\n *\n * export default defineScriptGrader(({ trace }) => {\n * if (!trace) {\n * return { pass: false, score: 0.5, reason: 'No trace available' };\n * }\n *\n * const efficient = trace.eventCount <= 10;\n * return {\n * pass: efficient,\n * score: efficient ? 1.0 : 0.5,\n * reason: efficient ? 'Efficient execution' : 'Too many tool calls',\n * checks: [{ text: 'Trace event count within limit', pass: efficient, reason: `${trace.eventCount} events observed` }],\n * };\n * });\n * ```\n *\n * @example With typed config\n * ```typescript\n * import { defineScriptGrader, z } from 'agentv';\n *\n * const ConfigSchema = z.object({\n * maxToolCalls: z.number().default(10),\n * });\n *\n * export default defineScriptGrader(({ trace, config }) => {\n * const { maxToolCalls } = ConfigSchema.parse(config ?? {});\n * // Use maxToolCalls...\n * });\n * ```\n */\nexport function defineScriptGrader(handler: ScriptGraderHandler): void {\n // Run immediately when module is loaded\n runScriptGrader(handler);\n}\n\n/** @deprecated Use defineScriptGrader. */\nexport function defineCodeGrader(handler: ScriptGraderHandler): void {\n defineScriptGrader(handler);\n}\n\n/**\n * Define a prompt template with automatic stdin/stdout handling.\n *\n * This function:\n * 1. Reads JSON from stdin (snake_case format)\n * 2. Converts to camelCase and validates with Zod\n * 3. Calls your handler with typed input\n * 4. Outputs the generated prompt string to stdout\n * 5. Handles errors gracefully with proper exit codes\n *\n * @param handler - Function that generates the prompt string from input\n *\n * @example\n * ```typescript\n * import { definePromptTemplate } from 'agentv';\n *\n * export default definePromptTemplate((ctx) => {\n * const question = ctx.input\n * .filter((message) => message.role === 'user')\n * .map((message) => typeof message.content === 'string' ? message.content : '')\n * .join('\\n');\n * const answer = ctx.output ?? '';\n * return `Question: ${question}\\nAnswer: ${answer}`;\n * });\n * ```\n */\nexport function definePromptTemplate(handler: PromptTemplateHandler): void {\n // Run immediately when module is loaded\n runPromptTemplate(handler);\n}\n\n/**\n * Define a custom assertion with automatic stdin/stdout handling.\n *\n * Assertions are the simplest way to add reusable custom checks. They receive\n * the full evaluation context and return a pass/fail result with optional\n * granular scoring. Place these files in `.agentv/assertions/` and reference\n * them by discovered assertion type name. Use defineScriptGrader for\n * command-backed graders referenced with `type: script`.\n *\n * This function:\n * 1. Reads JSON from stdin (snake_case format)\n * 2. Converts to camelCase and validates with Zod\n * 3. Calls your handler with typed context\n * 4. Normalizes the result (pass→score, clamp, etc.)\n * 5. Outputs JSON to stdout\n * 6. Handles errors gracefully with proper exit codes\n *\n * @param handler - Function that evaluates the context and returns a result\n *\n * @example Simple pass/fail\n * ```typescript\n * import { defineAssertion } from 'agentv';\n *\n * export default defineAssertion(({ output }) => {\n * const text = output ?? '';\n * return {\n * pass: text.toLowerCase().includes('hello'),\n * reason: text.toLowerCase().includes('hello') ? 'Greeting found' : 'Greeting missing',\n * };\n * }));\n * ```\n *\n * @example Granular scoring\n * ```typescript\n * import { defineAssertion } from 'agentv';\n *\n * export default defineAssertion(({ output, traceSummary }) => {\n * const text = output ?? '';\n * const hasContent = text.length > 0 ? 0.5 : 0;\n * const isEfficient = (traceSummary?.eventCount ?? 0) <= 5 ? 0.5 : 0;\n * return {\n * score: hasContent + isEfficient,\n * reason: 'Checks content exists and trace size',\n * checks: [\n * { text: 'Has content', pass: !!hasContent, reason: hasContent ? 'Output is non-empty' : 'Output is empty' },\n * { text: 'Efficient', pass: !!isEfficient, reason: isEfficient ? 'Trace is within limit' : 'Trace exceeds limit' },\n * ],\n * };\n * }));\n * ```\n */\nexport function defineAssertion(handler: AssertionHandler): void {\n runAssertion(handler);\n}\n","import { stringify as stringifyYaml } from 'yaml';\n\nconst EVAL_SUITE_SYMBOL = Symbol.for('agentv/eval-suite');\nconst TO_EVAL_YAML_OBJECT_SYMBOL = Symbol.for('agentv/to-eval-yaml-object');\n\nconst KNOWN_SNAKE_CASE_KEYS = {\n afterAll: 'after_all',\n afterEach: 'after_each',\n argsMatch: 'args_match',\n beforeAll: 'before_all',\n beforeEach: 'before_each',\n budgetUsd: 'budget_usd',\n conversationId: 'conversation_id',\n dependsOn: 'depends_on',\n expectedOutput: 'expected_output',\n explorationTolerance: 'exploration_tolerance',\n failOnError: 'fail_on_error',\n inputFiles: 'input_files',\n keepWorkspaces: 'keep_workspaces',\n maxCalls: 'max_calls',\n maxCostUsd: 'max_cost_usd',\n maxDurationMs: 'max_duration_ms',\n maxInput: 'max_input',\n maxLlmCalls: 'max_llm_calls',\n maxOutput: 'max_output',\n maxSteps: 'max_steps',\n maxTokens: 'max_tokens',\n maxToolCalls: 'max_tool_calls',\n minScore: 'min_score',\n onDependencyFailure: 'on_dependency_failure',\n onTurnFailure: 'on_turn_failure',\n outputPath: 'output_path',\n readOnly: 'read_only',\n reasoningEffort: 'reasoning_effort',\n rubricPrompt: 'rubric_prompt',\n scoreRange: 'score_range',\n scoreRanges: 'score_ranges',\n skipDefaults: 'skip_defaults',\n targetExplorationRatio: 'target_exploration_ratio',\n timeoutMs: 'timeout_ms',\n timeoutSeconds: 'timeout_seconds',\n useTarget: 'use_target',\n defaultTest: 'default_test',\n windowSize: 'window_size',\n} as const;\n\ntype KnownSnakeCaseKeyMap = typeof KNOWN_SNAKE_CASE_KEYS;\n\ntype LowerEvalKey<Key extends string> = Key extends keyof KnownSnakeCaseKeyMap\n ? KnownSnakeCaseKeyMap[Key]\n : Key;\n\nexport type LowerEvalYamlValue<Value> = Value extends readonly (infer Item)[]\n ? LowerEvalYamlValue<Item>[]\n : Value extends object\n ? {\n [Key in keyof Value as Key extends string ? LowerEvalKey<Key> : never]: LowerEvalYamlValue<\n Value[Key]\n >;\n }\n : Value;\n\nexport type EvalMessageContent =\n | string\n | Readonly<Record<string, unknown>>\n | readonly (string | Readonly<Record<string, unknown>>)[];\n\nexport interface EvalMessage {\n readonly role: 'system' | 'user' | 'assistant' | 'tool';\n readonly content: EvalMessageContent;\n readonly [key: string]: unknown;\n}\n\nexport interface EvalAssertionConfig {\n readonly type: string;\n readonly provider?: string | true | object;\n readonly [key: string]: unknown;\n}\n\nexport interface EvalLifecycleHook {\n readonly command?: string | readonly string[];\n readonly timeoutMs?: number;\n readonly cwd?: string;\n readonly reset?: 'none' | 'fast' | 'strict';\n readonly [key: string]: unknown;\n}\n\nexport interface EvalLifecycleHooks {\n readonly enabled?: boolean;\n readonly beforeAll?: EvalLifecycleHook;\n readonly beforeEach?: EvalLifecycleHook;\n readonly afterEach?: EvalLifecycleHook;\n readonly afterAll?: EvalLifecycleHook;\n}\n\nexport interface EvalEnvironmentSetup {\n readonly command: readonly string[];\n readonly cwd?: string;\n readonly timeoutMs?: number;\n}\n\nexport interface EvalDockerEnvironmentMount {\n readonly source: string;\n readonly target: string;\n readonly access?: 'ro' | 'rw';\n readonly readOnly?: boolean;\n}\n\nexport interface EvalDockerEnvironmentResources {\n readonly cpus?: number;\n readonly memory?: string;\n readonly disk?: string;\n readonly gpu?: boolean | string;\n}\n\nexport interface EvalHostEnvironment {\n readonly type: 'host';\n readonly workdir: string;\n readonly setup?: EvalEnvironmentSetup;\n readonly env?: Readonly<Record<string, string>>;\n}\n\nexport interface EvalDockerEnvironment {\n readonly type: 'docker';\n readonly workdir: string;\n readonly context?: string;\n readonly dockerfile?: string;\n readonly image?: string;\n readonly setup?: EvalEnvironmentSetup;\n readonly env?: Readonly<Record<string, string>>;\n readonly resources?: EvalDockerEnvironmentResources;\n readonly mounts?: readonly EvalDockerEnvironmentMount[];\n readonly secrets?: Readonly<Record<string, string>>;\n}\n\nexport type EvalEnvironment = EvalHostEnvironment | EvalDockerEnvironment;\n\nexport interface EvalProviderRef {\n readonly label: string;\n readonly id?: string;\n readonly useProvider?: string;\n readonly hooks?: EvalLifecycleHooks;\n}\n\nexport interface EvalProviderConfig {\n readonly extends?: string;\n readonly id: string;\n readonly label?: string;\n readonly model?: string;\n readonly config?: Readonly<Record<string, unknown>>;\n readonly prompts?: unknown;\n readonly transform?: unknown;\n readonly delay?: number;\n readonly inputs?: unknown;\n readonly env?: Readonly<Record<string, string>>;\n readonly reasoningEffort?: string;\n readonly hooks?: EvalLifecycleHooks;\n readonly [key: string]: unknown;\n}\n\nexport type EvalProviderMap = Readonly<\n Record<\n string,\n Omit<EvalProviderConfig, 'id'> | EvalProviderRef | Readonly<Record<string, unknown>>\n >\n>;\n\nexport type EvalProviderEntry = string | EvalProviderRef | EvalProviderConfig | EvalProviderMap;\n\nexport interface EvalDefaultsConfig {\n readonly provider?: string;\n readonly grader?: string;\n readonly [key: string]: unknown;\n}\n\nexport interface EvalTestOptions {\n readonly provider?: string;\n readonly transform?: unknown;\n readonly repeat?: EvalRepeat;\n readonly rubricPrompt?: unknown;\n readonly [key: string]: unknown;\n}\n\nexport interface EvalDefaultTest {\n readonly vars?: Readonly<Record<string, unknown>>;\n readonly assert?: readonly (string | EvalAssertionConfig)[];\n readonly options?: EvalTestOptions;\n readonly [key: string]: unknown;\n}\n\nexport type EvalRepeat = number;\n\nexport interface EvalExecution {\n readonly provider?: string;\n readonly providers?: readonly EvalProviderEntry[];\n readonly assert?: readonly EvalAssertionConfig[];\n readonly skipDefaults?: boolean;\n readonly cache?: boolean;\n readonly trials?: never;\n readonly budgetUsd?: number;\n readonly failOnError?: boolean;\n readonly threshold?: number;\n readonly [key: string]: unknown;\n}\n\nexport interface EvalTurn {\n readonly input: EvalMessageContent;\n readonly expectedOutput?: EvalMessageContent;\n readonly assert?: readonly (string | EvalAssertionConfig)[];\n}\n\nexport interface EvalTest {\n readonly id: string;\n readonly vars?: Readonly<Record<string, unknown>>;\n readonly criteria?: string;\n readonly inputFiles?: readonly string[];\n readonly expectedOutput?: string | Readonly<Record<string, unknown>> | readonly EvalMessage[];\n readonly assert?: readonly EvalAssertionConfig[];\n readonly options?: EvalTestOptions;\n readonly execution?: EvalExecution;\n readonly environment?: EvalEnvironment | string;\n readonly metadata?: Readonly<Record<string, unknown>>;\n readonly conversationId?: string;\n readonly suite?: string;\n readonly dependsOn?: readonly string[];\n readonly onDependencyFailure?: 'skip' | 'fail' | 'run';\n readonly mode?: 'conversation';\n readonly turns?: readonly EvalTurn[];\n readonly aggregation?: 'mean' | 'min' | 'max';\n readonly onTurnFailure?: 'continue' | 'stop';\n readonly windowSize?: number;\n}\n\nexport interface EvalRequires {\n readonly agentv?: string;\n readonly [key: string]: unknown;\n}\n\nexport interface EvalConfig {\n readonly $schema?: string;\n readonly name?: string;\n readonly description?: string;\n readonly category?: string;\n readonly version?: string;\n readonly author?: string;\n /**\n * Suite tags. Either the selection list form (`string[]`, drives\n * `select.tags` / `--tag name` filtering) or the promptfoo-shaped\n * `Record<string,string>` map. In the map form the reserved `experiment` key\n * labels the run/experiment (grouped by the Dashboard), matching\n * `tags.experiment` in YAML evals.\n */\n readonly tags?: readonly string[] | Readonly<Record<string, string>>;\n readonly license?: string;\n readonly requires?: EvalRequires;\n readonly inputFiles?: readonly string[];\n readonly prompts?: unknown;\n readonly providers?: readonly EvalProviderEntry[];\n readonly defaults?: EvalDefaultsConfig;\n readonly defaultTest?: EvalDefaultTest | string;\n readonly tests: readonly EvalTest[] | string;\n /** @deprecated Rejected. Use `tags: { experiment: '<name>' }` or CLI --experiment. */\n readonly experiment?: never;\n readonly repeat?: EvalRepeat;\n readonly timeoutSeconds?: number;\n readonly threshold?: number;\n readonly budgetUsd?: number;\n readonly assert?: readonly EvalAssertionConfig[];\n readonly environment?: EvalEnvironment | string;\n}\n\nexport interface DefinedEvalSuite {\n readonly [EVAL_SUITE_SYMBOL]: true;\n readonly [TO_EVAL_YAML_OBJECT_SYMBOL]: () => Record<string, unknown>;\n}\n\nfunction lowerEvalYamlValue(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => lowerEvalYamlValue(item));\n }\n\n if (value && typeof value === 'object') {\n const result: Record<string, unknown> = {};\n for (const [key, nestedValue] of Object.entries(value)) {\n const loweredKey = KNOWN_SNAKE_CASE_KEYS[key as keyof KnownSnakeCaseKeyMap] ?? key;\n result[loweredKey] = lowerEvalYamlValue(nestedValue);\n }\n return result;\n }\n\n return value;\n}\n\nfunction lowerEvalConfig(config: unknown): Record<string, unknown> {\n const lowered = lowerEvalYamlValue(config) as Record<string, unknown>;\n const { budget_usd: budgetUsd, repeat, ...loweredWithoutRuntimeOptions } = lowered;\n validateRepeatValue(repeat, 'repeat');\n if (budgetUsd === undefined && repeat === undefined) {\n return lowered;\n }\n\n const evaluateOptions =\n lowered.evaluate_options &&\n typeof lowered.evaluate_options === 'object' &&\n !Array.isArray(lowered.evaluate_options)\n ? { ...(lowered.evaluate_options as Record<string, unknown>) }\n : {};\n\n if (budgetUsd !== undefined && evaluateOptions.budget_usd === undefined) {\n evaluateOptions.budget_usd = budgetUsd;\n }\n if (repeat !== undefined && evaluateOptions.repeat === undefined) {\n evaluateOptions.repeat = repeat;\n }\n return {\n ...loweredWithoutRuntimeOptions,\n evaluate_options: evaluateOptions,\n };\n}\n\nfunction validateRepeatValue(value: unknown, location: string): void {\n if (value === undefined) {\n return;\n }\n if (typeof value !== 'number' || !Number.isInteger(value) || value < 1) {\n throw new Error(\n `defineEval() expects ${location} to be a positive integer; object-shaped repeat authoring has been removed.`,\n );\n }\n}\n\nfunction attachEvalSuiteBrand<T extends EvalConfig>(definition: T): T & DefinedEvalSuite {\n validateTopLevelRuntimeFields(definition);\n const branded = definition as T & Partial<DefinedEvalSuite>;\n\n if (branded[EVAL_SUITE_SYMBOL] === true) {\n return branded as T & DefinedEvalSuite;\n }\n\n Object.defineProperties(branded, {\n [EVAL_SUITE_SYMBOL]: {\n value: true,\n enumerable: false,\n configurable: false,\n writable: false,\n },\n [TO_EVAL_YAML_OBJECT_SYMBOL]: {\n value: () => toEvalYamlObject(definition),\n enumerable: false,\n configurable: false,\n writable: false,\n },\n });\n\n return branded as T & DefinedEvalSuite;\n}\n\nfunction validateTopLevelRuntimeFields(definition: EvalConfig): void {\n const rawDefinition = definition as unknown as Record<string, unknown>;\n if (Object.prototype.hasOwnProperty.call(rawDefinition, 'input')) {\n throw new Error(\n \"defineEval() does not accept top-level 'input'. Use prompts with default test vars or tests[].vars instead.\",\n );\n }\n if (Object.prototype.hasOwnProperty.call(rawDefinition, 'preprocessors')) {\n throw new Error(\n \"defineEval() does not accept top-level 'preprocessors'. Use defaultTest.options.transform or assertion-level transform instead.\",\n );\n }\n if (Object.prototype.hasOwnProperty.call(rawDefinition, 'graders')) {\n throw new Error(\n \"defineEval() no longer accepts top-level 'graders'. Put grader providers in 'providers' and select them with defaults.grader, defaultTest.options.provider, tests[].options.provider, or assertion provider.\",\n );\n }\n if (Object.prototype.hasOwnProperty.call(rawDefinition, 'experiment')) {\n throw new Error(\n \"defineEval() no longer accepts top-level 'experiment'. Use tags: { experiment: '<name>' } or CLI --experiment.\",\n );\n }\n for (const field of ['model', 'policy', 'execution', 'runs', 'earlyExit']) {\n if (Object.prototype.hasOwnProperty.call(rawDefinition, field)) {\n throw new Error(\n `defineEval() does not accept top-level '${field}'. Put target overrides in target and repeat controls under repeat, which serializes to evaluate_options.repeat.`,\n );\n }\n }\n validateRepeatValue(rawDefinition.repeat, 'repeat');\n if (Array.isArray(rawDefinition.tests)) {\n rawDefinition.tests.forEach((test, index) => {\n if (test && typeof test === 'object' && Object.prototype.hasOwnProperty.call(test, 'input')) {\n throw new Error(\n `defineEval() does not accept tests[${index}].input. Use prompts with tests[].vars instead.`,\n );\n }\n const options = (test as { readonly options?: unknown }).options;\n if (options && typeof options === 'object' && !Array.isArray(options)) {\n validateRepeatValue(\n (options as { readonly repeat?: unknown }).repeat,\n `tests[${index}].options.repeat`,\n );\n }\n });\n }\n validateProviderSurface(definition);\n}\n\nfunction validateProviderSurface(definition: unknown): void {\n const visit = (value: unknown, path: string): void => {\n if (Array.isArray(value)) {\n value.forEach((entry, index) => visit(entry, `${path}[${index}]`));\n return;\n }\n if (!value || typeof value !== 'object') return;\n\n const record = value as Record<string, unknown>;\n if (path.endsWith('.defaults') && Object.prototype.hasOwnProperty.call(record, 'target')) {\n throw new Error(\"defineEval() no longer accepts 'defaults.target'. Use 'defaults.provider'.\");\n }\n if (Object.prototype.hasOwnProperty.call(record, 'target')) {\n throw new Error(\n `defineEval() no longer accepts '${path}.target'. Use '${path}.provider' or '${path}.providers' instead.`,\n );\n }\n if (Object.prototype.hasOwnProperty.call(record, 'targets')) {\n throw new Error(\n `defineEval() no longer accepts '${path}.targets'. Use '${path}.providers' instead.`,\n );\n }\n\n for (const [key, nested] of Object.entries(record)) {\n visit(nested, `${path}.${key}`);\n }\n };\n\n visit(definition, 'eval');\n}\n\n/**\n * Define a YAML-aligned eval suite in TypeScript.\n *\n * The returned object preserves the TypeScript authoring shape and carries a\n * non-enumerable lowering hook so AgentV can materialize the canonical\n * snake_case eval contract when the suite is loaded from a `.eval.ts` file.\n */\nexport function defineEval<T extends EvalConfig>(definition: T): T & DefinedEvalSuite {\n return attachEvalSuiteBrand(definition);\n}\n\n/**\n * Lower a TypeScript-authored eval suite into the canonical snake_case object\n * contract used by YAML files and the runtime loader.\n *\n * Only known AgentV wire keys are converted. Unknown keys are preserved as-is\n * so opaque assertion, provider, and metadata payloads are not corrupted.\n */\nexport function toEvalYamlObject<T extends EvalConfig | DefinedEvalSuite>(\n definition: T,\n): LowerEvalYamlValue<T> {\n return lowerEvalConfig(definition) as LowerEvalYamlValue<T>;\n}\n\n/**\n * Serialize an eval suite to canonical YAML.\n */\nexport function serializeEvalYaml<T extends EvalConfig | DefinedEvalSuite>(definition: T): string {\n return stringifyYaml(toEvalYamlObject(definition), { lineWidth: 0 }).trimEnd();\n}\n","import type { EvalAssertionConfig } from './eval.js';\n\nexport type GraderCommand = string | readonly string[];\n\nexport interface GraderHelperOptions {\n readonly metric?: string;\n readonly weight?: number;\n readonly required?: boolean;\n readonly minScore?: number;\n readonly negate?: boolean;\n readonly transform?: string;\n}\n\nexport interface GraderCommonConfig {\n readonly metric?: string;\n readonly weight?: number;\n readonly required?: boolean;\n readonly minScore?: number;\n readonly negate?: boolean;\n readonly transform?: string;\n}\n\nexport interface ContainsGraderConfig extends EvalAssertionConfig, GraderCommonConfig {\n readonly type: 'contains';\n readonly value: string;\n}\n\nexport interface EqualsGraderConfig extends EvalAssertionConfig, GraderCommonConfig {\n readonly type: 'equals';\n readonly value: string;\n}\n\nexport interface RegexGraderOptions extends GraderHelperOptions {\n readonly flags?: string;\n}\n\nexport interface RegexGraderConfig extends EvalAssertionConfig, GraderCommonConfig {\n readonly type: 'regex';\n readonly value: string;\n readonly flags?: string;\n}\n\nexport interface IsJsonGraderConfig extends EvalAssertionConfig, GraderCommonConfig {\n readonly type: 'is-json';\n}\n\nexport type GraderRubricOperator = 'correctness' | 'contradiction';\n\nexport interface GraderScoreRange {\n readonly scoreRange: readonly [number, number];\n readonly outcome: string;\n}\n\nexport interface GraderRubric {\n readonly id?: string;\n readonly outcome?: string;\n readonly criteria?: string;\n readonly operator?: GraderRubricOperator;\n readonly weight?: number;\n readonly required?: boolean;\n readonly minScore?: number;\n readonly scoreRanges?: readonly GraderScoreRange[];\n}\n\nexport type GraderRubricCriterion = string | GraderRubric;\n\nexport interface LlmRubricGraderConfig extends EvalAssertionConfig, GraderCommonConfig {\n readonly type: 'llm-rubric';\n readonly value?: unknown;\n readonly prompt?: string | GraderPromptScriptConfig;\n readonly provider?: string;\n readonly config?: Readonly<Record<string, unknown>>;\n readonly maxSteps?: number;\n readonly temperature?: number;\n}\n\nexport interface GraderPromptScriptConfig {\n readonly command: readonly string[];\n readonly config?: Readonly<Record<string, unknown>>;\n}\n\nexport interface ScriptGraderProviderOptions {\n readonly maxCalls?: number;\n}\n\nexport interface ScriptGraderOptions extends GraderHelperOptions {\n readonly cwd?: string;\n readonly provider?: true | ScriptGraderProviderOptions;\n readonly config?: Readonly<Record<string, unknown>>;\n}\n\nexport interface ScriptGraderConfig extends EvalAssertionConfig, GraderCommonConfig {\n readonly type: 'script';\n readonly command: GraderCommand;\n readonly cwd?: string;\n readonly provider?: true | ScriptGraderProviderOptions;\n readonly config?: Readonly<Record<string, unknown>>;\n}\n\n/** @deprecated Use ScriptGraderProviderOptions. */\nexport type ScriptGraderTargetOptions = ScriptGraderProviderOptions;\n\n/** @deprecated Use ScriptGraderProviderOptions. */\nexport type CodeGraderTargetOptions = ScriptGraderProviderOptions;\n\n/** @deprecated Use ScriptGraderOptions. */\nexport type CodeGraderOptions = ScriptGraderOptions;\n\n/** @deprecated Use ScriptGraderConfig with type: 'script'. */\nexport type CodeGraderConfig = ScriptGraderConfig;\n\nexport type GraderHelperConfig =\n | ContainsGraderConfig\n | EqualsGraderConfig\n | RegexGraderConfig\n | IsJsonGraderConfig\n | LlmRubricGraderConfig\n | ScriptGraderConfig;\n\nfunction withCommon<T extends { readonly type: string }>(\n config: T,\n options: GraderHelperOptions = {},\n): T & GraderCommonConfig & EvalAssertionConfig {\n return {\n ...(options.metric !== undefined ? { metric: options.metric } : {}),\n ...config,\n ...(options.weight !== undefined ? { weight: options.weight } : {}),\n ...(options.required !== undefined ? { required: options.required } : {}),\n ...(options.minScore !== undefined ? { minScore: options.minScore } : {}),\n ...(options.negate !== undefined ? { negate: options.negate } : {}),\n ...(options.transform !== undefined ? { transform: options.transform } : {}),\n } as T & GraderCommonConfig & EvalAssertionConfig;\n}\n\nexport function containsGrader(value: string, options?: GraderHelperOptions): ContainsGraderConfig {\n return withCommon({ type: 'contains', value }, options);\n}\n\nexport function equalsGrader(value: string, options?: GraderHelperOptions): EqualsGraderConfig {\n return withCommon({ type: 'equals', value }, options);\n}\n\nexport function exactGrader(value: string, options?: GraderHelperOptions): EqualsGraderConfig {\n return equalsGrader(value, options);\n}\n\nexport function regexGrader(\n pattern: string | RegExp,\n options: RegexGraderOptions = {},\n): RegexGraderConfig {\n const value = pattern instanceof RegExp ? pattern.source : pattern;\n const flags = options.flags ?? (pattern instanceof RegExp ? pattern.flags : undefined);\n\n return withCommon(\n {\n type: 'regex',\n value,\n ...(flags ? { flags } : {}),\n },\n options,\n );\n}\n\nexport function isJsonGrader(options?: GraderHelperOptions): IsJsonGraderConfig {\n return withCommon({ type: 'is-json' }, options);\n}\n\nexport function jsonGrader(options?: GraderHelperOptions): IsJsonGraderConfig {\n return isJsonGrader(options);\n}\n\nexport function llmRubricGrader(\n valueOrCriteria?: string | readonly GraderRubricCriterion[] | Readonly<Record<string, unknown>>,\n options: GraderHelperOptions & {\n readonly prompt?: string | GraderPromptScriptConfig;\n readonly provider?: string;\n readonly config?: Readonly<Record<string, unknown>>;\n readonly maxSteps?: number;\n readonly temperature?: number;\n } = {},\n): LlmRubricGraderConfig {\n return withCommon(\n {\n type: 'llm-rubric',\n ...(valueOrCriteria !== undefined ? { value: valueOrCriteria } : {}),\n ...(options.prompt !== undefined ? { prompt: options.prompt } : {}),\n ...(options.provider !== undefined ? { provider: options.provider } : {}),\n ...(options.config !== undefined ? { config: options.config } : {}),\n ...(options.maxSteps !== undefined ? { maxSteps: options.maxSteps } : {}),\n ...(options.temperature !== undefined ? { temperature: options.temperature } : {}),\n },\n options,\n );\n}\n\n/** @deprecated Use scriptGrader. */\nexport function codeGrader(\n command: GraderCommand,\n options: ScriptGraderOptions = {},\n): ScriptGraderConfig {\n return scriptGrader(command, options);\n}\n\nexport function scriptGrader(\n command: GraderCommand,\n options: ScriptGraderOptions = {},\n): ScriptGraderConfig {\n return withCommon(\n {\n type: 'script',\n command,\n ...(options.cwd !== undefined ? { cwd: options.cwd } : {}),\n ...(options.provider !== undefined ? { provider: options.provider } : {}),\n ...(options.config !== undefined ? { config: options.config } : {}),\n },\n options,\n );\n}\n\nexport const graders = Object.freeze({\n contains: containsGrader,\n equals: equalsGrader,\n exact: exactGrader,\n regex: regexGrader,\n isJson: isJsonGrader,\n json: jsonGrader,\n llmRubric: llmRubricGrader,\n codeGrader,\n script: scriptGrader,\n scriptGrader,\n});\n\nexport type GraderCatalog = typeof graders;\n","/**\n * Runtime-only client for invoking configured providers from script-grader scripts\n * through AgentV's provider proxy.\n *\n * Environment variables (set automatically by AgentV when provider proxy access is enabled):\n * - AGENTV_PROVIDER_PROXY_URL: The URL of the local proxy server\n * - AGENTV_PROVIDER_PROXY_TOKEN: Bearer token for authentication\n */\n\nimport type { TokenUsage } from './schemas.js';\n\n/**\n * Request to invoke the provider\n */\nexport interface ProviderInvokeRequest {\n readonly question: string;\n readonly systemPrompt?: string;\n readonly evalCaseId?: string;\n readonly attempt?: number;\n /** Optional provider override - use a different provider for this invocation */\n readonly provider?: string;\n}\n\n/**\n * Response from a provider invocation\n */\nexport interface ProviderInvokeResponse {\n readonly output: readonly unknown[];\n readonly rawText?: string;\n readonly tokenUsage?: TokenUsage;\n}\n\n/**\n * Information about the provider proxy configuration\n */\nexport interface ProviderInfo {\n /** Label of the default provider being used */\n readonly providerLabel: string;\n /** Maximum number of calls allowed */\n readonly maxCalls: number;\n /** Current number of calls made */\n readonly callCount: number;\n /** Labels of all available providers */\n readonly availableProviderLabels: readonly string[];\n}\n\n/**\n * Provider client for making provider invocations\n */\nexport interface ProviderClient {\n /**\n * Invoke the configured provider with a prompt.\n * @param request - The question and optional system prompt\n * @returns The provider's response with output messages and optional raw text\n */\n invoke(request: ProviderInvokeRequest): Promise<ProviderInvokeResponse>;\n\n /**\n * Invoke the provider with multiple requests in sequence.\n * Each request counts toward the max_calls limit.\n * @param requests - Array of provider requests\n * @returns Array of provider responses\n */\n invokeBatch(\n requests: readonly ProviderInvokeRequest[],\n ): Promise<readonly ProviderInvokeResponse[]>;\n\n /**\n * Get information about the provider proxy configuration.\n * Returns the default provider label, max calls, current call count, and available providers.\n */\n getInfo(): Promise<ProviderInfo>;\n}\n\n/**\n * Error thrown when provider proxy is not available\n */\nexport class ProviderNotAvailableError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ProviderNotAvailableError';\n }\n}\n\n/**\n * Error thrown when provider invocation fails\n */\nexport class ProviderInvocationError extends Error {\n readonly statusCode?: number;\n\n constructor(message: string, statusCode?: number) {\n super(message);\n this.name = 'ProviderInvocationError';\n this.statusCode = statusCode;\n }\n}\n\n/**\n * Create a provider client from environment variables.\n *\n * This function reads the proxy URL and token from environment variables\n * that are automatically set by AgentV when provider access is enabled on a\n * `script` evaluator.\n *\n * @returns A provider client if environment variables are set, otherwise undefined\n * @throws ProviderNotAvailableError if token is missing when URL is present\n *\n * @example\n * ```typescript\n * import { createProviderClient, defineScriptGrader } from 'agentv';\n *\n * export default defineScriptGrader(async ({ input, criteria, output }) => {\n * const provider = createProviderClient();\n * const question = input\n * .filter((message) => message.role === 'user')\n * .map((message) => typeof message.content === 'string' ? message.content : '')\n * .join('\\n');\n *\n * if (!provider) {\n * return { pass: false, score: 0.5, reason: 'Provider proxy not available' };\n * }\n *\n * const response = await provider.invoke({\n * question: `Is this answer correct? Question: ${question}, Expected: ${criteria}, Answer: ${output ?? ''}`,\n * systemPrompt: 'You are an expert grader. Respond with JSON: { \"correct\": true/false }'\n * });\n *\n * const result = JSON.parse(response.rawText ?? '{}');\n * return {\n * pass: result.correct === true,\n * score: result.correct === true ? 1.0 : 0.0,\n * reason: result.correct === true ? 'Provider judged the answer correct' : 'Provider judged the answer incorrect',\n * };\n * });\n * ```\n */\nexport function createProviderClient(): ProviderClient | undefined {\n const proxyUrl = process.env.AGENTV_PROVIDER_PROXY_URL;\n const proxyToken = process.env.AGENTV_PROVIDER_PROXY_TOKEN;\n\n if (!proxyUrl) {\n return undefined;\n }\n\n if (!proxyToken) {\n throw new ProviderNotAvailableError(\n 'AGENTV_PROVIDER_PROXY_URL is set but AGENTV_PROVIDER_PROXY_TOKEN is missing',\n );\n }\n\n return createProviderClientInternal(proxyUrl, proxyToken);\n}\n\n/**\n * Internal: Create a provider client with explicit URL and token.\n * Exported for testing only - use createProviderClient() in production.\n */\nexport function createProviderClientInternal(url: string, token: string): ProviderClient {\n const headers = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n };\n\n return {\n async invoke(request: ProviderInvokeRequest): Promise<ProviderInvokeResponse> {\n const response = await fetch(`${url}/invoke`, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n question: request.question,\n systemPrompt: request.systemPrompt,\n evalCaseId: request.evalCaseId,\n attempt: request.attempt,\n provider: request.provider,\n }),\n });\n\n if (!response.ok) {\n const errorBody = await response.text();\n let errorMessage: string;\n try {\n const errorJson = JSON.parse(errorBody) as { error?: string };\n errorMessage = errorJson.error ?? `HTTP ${response.status}`;\n } catch {\n errorMessage = errorBody || `HTTP ${response.status}`;\n }\n throw new ProviderInvocationError(errorMessage, response.status);\n }\n\n return (await response.json()) as ProviderInvokeResponse;\n },\n\n async invokeBatch(\n requests: readonly ProviderInvokeRequest[],\n ): Promise<readonly ProviderInvokeResponse[]> {\n const response = await fetch(`${url}/invokeBatch`, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n requests: requests.map((r) => ({\n question: r.question,\n systemPrompt: r.systemPrompt,\n evalCaseId: r.evalCaseId,\n attempt: r.attempt,\n provider: r.provider,\n })),\n }),\n });\n\n if (!response.ok) {\n const errorBody = await response.text();\n let errorMessage: string;\n try {\n const errorJson = JSON.parse(errorBody) as { error?: string };\n errorMessage = errorJson.error ?? `HTTP ${response.status}`;\n } catch {\n errorMessage = errorBody || `HTTP ${response.status}`;\n }\n throw new ProviderInvocationError(errorMessage, response.status);\n }\n\n const result = (await response.json()) as { responses: ProviderInvokeResponse[] };\n return result.responses;\n },\n\n async getInfo(): Promise<ProviderInfo> {\n const response = await fetch(`${url}/info`, {\n method: 'GET',\n headers,\n });\n\n if (!response.ok) {\n const errorBody = await response.text();\n let errorMessage: string;\n try {\n const errorJson = JSON.parse(errorBody) as { error?: string };\n errorMessage = errorJson.error ?? `HTTP ${response.status}`;\n } catch {\n errorMessage = errorBody || `HTTP ${response.status}`;\n }\n throw new ProviderInvocationError(errorMessage, response.status);\n }\n\n return (await response.json()) as ProviderInfo;\n },\n };\n}\n","/**\n * Workspace grader helpers for deterministic file checks.\n *\n * `defineWorkspaceGrader()` wraps the script-grader runtime with a small\n * workspace object so graders can read files and return check arrays\n * without hand-rolling stdin parsing, workspace path fallback, file reads, or\n * score aggregation.\n */\nimport { readFile, stat } from 'node:fs/promises';\nimport nodePath from 'node:path';\n\nimport { runScriptGrader } from './runtime.js';\nimport {\n type ScriptGraderCheck,\n type ScriptGraderInput,\n type ScriptGraderResult,\n ScriptGraderResultSchema,\n} from './schemas.js';\n\nexport interface WorkspaceCheck {\n readonly text: string;\n readonly pass: boolean;\n readonly score?: number;\n readonly reason: string;\n readonly evidence?: string;\n}\n\n/** @deprecated Use WorkspaceCheck. */\nexport type WorkspaceAssertion = WorkspaceCheck;\n\ntype Awaitable<T> = T | Promise<T>;\n\nexport type WorkspaceGraderReturn =\n | ScriptGraderResult\n | WorkspaceCheck\n | readonly Awaitable<WorkspaceCheck>[];\n\nexport interface WorkspaceFileAssertionOptions {\n readonly text?: string;\n}\n\nexport interface WorkspaceFile {\n readonly path: string;\n readonly absolutePath?: string;\n readText(): Promise<string>;\n exists(options?: WorkspaceFileAssertionOptions): Promise<WorkspaceCheck>;\n contains(expected: string, options?: WorkspaceFileAssertionOptions): Promise<WorkspaceCheck>;\n notContains(expected: string, options?: WorkspaceFileAssertionOptions): Promise<WorkspaceCheck>;\n matches(pattern: RegExp, options?: WorkspaceFileAssertionOptions): Promise<WorkspaceCheck>;\n notMatches(pattern: RegExp, options?: WorkspaceFileAssertionOptions): Promise<WorkspaceCheck>;\n}\n\nexport interface Workspace {\n readonly path?: string;\n file(relativePath: string): WorkspaceFile;\n readText(relativePath: string): Promise<string>;\n}\n\nexport type WorkspaceGraderContext = ScriptGraderInput & {\n readonly workspace: Workspace;\n};\n\nexport type WorkspaceGraderHandler = (\n context: WorkspaceGraderContext,\n) => WorkspaceGraderReturn | Promise<WorkspaceGraderReturn>;\n\ninterface ResolvedWorkspacePath {\n readonly displayPath: string;\n readonly absolutePath?: string;\n readonly error?: string;\n}\n\nfunction workspacePathFrom(input: ScriptGraderInput): string | undefined {\n const workspacePath = input.workspacePath ?? process.env.AGENTV_WORKSPACE_PATH;\n if (!workspacePath?.trim()) {\n return undefined;\n }\n return workspacePath;\n}\n\nfunction normalizeDisplayPath(relativePath: string): string {\n return relativePath.split(nodePath.sep).join('/');\n}\n\nfunction resolveWorkspacePath(workspacePath: string | undefined, relativePath: string) {\n const displayPath = normalizeDisplayPath(relativePath);\n\n if (!workspacePath) {\n return {\n displayPath,\n error: 'Workspace path is not available. Configure an environment recipe in the eval YAML.',\n };\n }\n\n if (!relativePath.trim()) {\n return { displayPath, error: 'Workspace file path must not be empty.' };\n }\n\n if (nodePath.isAbsolute(relativePath)) {\n return {\n displayPath,\n error: `Workspace file path must be relative: ${displayPath}`,\n };\n }\n\n const root = nodePath.resolve(workspacePath);\n const absolutePath = nodePath.resolve(root, relativePath);\n const relativeToRoot = nodePath.relative(root, absolutePath);\n\n if (\n relativeToRoot === '' ||\n relativeToRoot.startsWith('..') ||\n nodePath.isAbsolute(relativeToRoot)\n ) {\n return {\n displayPath,\n error: `Workspace file path must stay inside the workspace: ${displayPath}`,\n };\n }\n\n return {\n displayPath: normalizeDisplayPath(relativeToRoot),\n absolutePath,\n };\n}\n\nfunction check(text: string, pass: boolean, reason: string, evidence?: string): WorkspaceCheck {\n return {\n text,\n pass,\n reason,\n ...(evidence !== undefined ? { evidence } : {}),\n };\n}\n\nfunction quote(value: string): string {\n return JSON.stringify(value);\n}\n\nfunction regexLabel(pattern: RegExp): string {\n return `/${pattern.source}/${pattern.flags}`;\n}\n\nasync function readFileForAssertion(\n file: WorkspaceFile,\n): Promise<{ readonly content: string } | { readonly error: string }> {\n try {\n return { content: await file.readText() };\n } catch (error) {\n return { error: error instanceof Error ? error.message : String(error) };\n }\n}\n\nfunction isScriptGraderResult(value: WorkspaceGraderReturn): value is ScriptGraderResult {\n return !Array.isArray(value) && typeof value === 'object' && value !== null && 'score' in value;\n}\n\nexport function createWorkspace(input: ScriptGraderInput): Workspace {\n const workspacePath = workspacePathFrom(input);\n const textCache = new Map<string, Promise<string>>();\n\n async function readText(relativePath: string) {\n const resolved = resolveWorkspacePath(workspacePath, relativePath);\n if (resolved.error) {\n throw new Error(resolved.error);\n }\n\n const absolutePath = resolved.absolutePath;\n if (!absolutePath) {\n throw new Error(`Unable to resolve workspace file: ${resolved.displayPath}`);\n }\n\n let pendingRead = textCache.get(absolutePath);\n if (!pendingRead) {\n pendingRead = readFile(absolutePath, 'utf8');\n textCache.set(absolutePath, pendingRead);\n }\n return pendingRead;\n }\n\n function file(relativePath: string): WorkspaceFile {\n const resolved = resolveWorkspacePath(workspacePath, relativePath);\n const label = resolved.displayPath;\n\n return {\n path: label,\n ...(resolved.absolutePath !== undefined ? { absolutePath: resolved.absolutePath } : {}),\n\n readText() {\n return readText(relativePath);\n },\n\n async exists(options: WorkspaceFileAssertionOptions = {}) {\n const text = options.text ?? `${label} exists`;\n if (resolved.error) {\n return check(text, false, resolved.error);\n }\n\n try {\n const fileStat = await stat(resolved.absolutePath as string);\n if (fileStat.isFile()) {\n return check(text, true, `${label} exists.`);\n }\n return check(text, false, `${label} exists but is not a file.`);\n } catch {\n return check(text, false, `${label} does not exist.`);\n }\n },\n\n async contains(expected: string, options: WorkspaceFileAssertionOptions = {}) {\n const text = options.text ?? `${label} contains ${quote(expected)}`;\n const content = await readFileForAssertion(this);\n if ('error' in content) {\n return check(text, false, content.error);\n }\n\n const pass = content.content.includes(expected);\n return check(\n text,\n pass,\n pass\n ? `${label} contains ${quote(expected)}.`\n : `${label} is missing ${quote(expected)}.`,\n );\n },\n\n async notContains(expected: string, options: WorkspaceFileAssertionOptions = {}) {\n const text = options.text ?? `${label} does not contain ${quote(expected)}`;\n const content = await readFileForAssertion(this);\n if ('error' in content) {\n return check(text, false, content.error);\n }\n\n const pass = !content.content.includes(expected);\n return check(\n text,\n pass,\n pass\n ? `${label} does not contain ${quote(expected)}.`\n : `${label} contains unexpected text ${quote(expected)}.`,\n );\n },\n\n async matches(pattern: RegExp, options: WorkspaceFileAssertionOptions = {}) {\n const text = options.text ?? `${label} matches ${regexLabel(pattern)}`;\n const content = await readFileForAssertion(this);\n if ('error' in content) {\n return check(text, false, content.error);\n }\n\n pattern.lastIndex = 0;\n const pass = pattern.test(content.content);\n return check(\n text,\n pass,\n pass\n ? `${label} matches ${regexLabel(pattern)}.`\n : `${label} does not match ${regexLabel(pattern)}.`,\n );\n },\n\n async notMatches(pattern: RegExp, options: WorkspaceFileAssertionOptions = {}) {\n const text = options.text ?? `${label} does not match ${regexLabel(pattern)}`;\n const content = await readFileForAssertion(this);\n if ('error' in content) {\n return check(text, false, content.error);\n }\n\n pattern.lastIndex = 0;\n const pass = !pattern.test(content.content);\n return check(\n text,\n pass,\n pass\n ? `${label} does not match ${regexLabel(pattern)}.`\n : `${label} matches unexpected pattern ${regexLabel(pattern)}.`,\n );\n },\n };\n }\n\n return {\n ...(workspacePath !== undefined ? { path: workspacePath } : {}),\n file,\n readText,\n };\n}\n\nexport async function normalizeWorkspaceGraderResult(\n result: WorkspaceGraderReturn,\n): Promise<ScriptGraderResult> {\n if (isScriptGraderResult(result)) {\n return ScriptGraderResultSchema.parse(result);\n }\n\n const checks = Array.isArray(result) ? await Promise.all(result) : [result];\n const passed = checks.filter((item) => item.pass).length;\n const score =\n checks.length > 0\n ? checks.reduce((sum, item) => sum + (item.score ?? (item.pass ? 1 : 0)), 0) / checks.length\n : 0;\n\n return ScriptGraderResultSchema.parse({\n pass: checks.length > 0 && passed === checks.length,\n score,\n reason: checks.length > 0 ? `${passed}/${checks.length} checks passed.` : 'No checks ran.',\n checks: checks satisfies readonly ScriptGraderCheck[],\n });\n}\n\nexport async function runWorkspaceGrader(\n handler: WorkspaceGraderHandler,\n input: ScriptGraderInput,\n): Promise<ScriptGraderResult> {\n return normalizeWorkspaceGraderResult(\n await handler({\n ...input,\n workspace: createWorkspace(input),\n }),\n );\n}\n\nexport function defineWorkspaceGrader(handler: WorkspaceGraderHandler): void {\n runScriptGrader((input) => runWorkspaceGrader(handler, input));\n}\n","export {\n runCodeGrader,\n runScriptGrader,\n type CodeGraderHandler,\n type ScriptGraderHandler,\n} from '@agentv/core/script-grader';\n","export {\n defineVitestWorkspaceGrader,\n runVitestWorkspaceGrader,\n vitestReportToCodeGraderResult,\n vitestReportToScriptGraderResult,\n type VitestWorkspaceGraderOptions,\n} from '@agentv/core/script-grader';\n","/**\n * Runtime for custom assertion evaluators.\n * Handles stdin parsing, validation, error handling, and output formatting.\n *\n * Assertions receive the same input as script graders but use a simplified result\n * contract focused on pass/fail with optional score granularity.\n */\nimport { readFileSync } from 'node:fs';\nimport { toCamelCaseDeep } from '@agentv/core';\n\nimport { enrichInput } from './deprecation.js';\nimport {\n type ScriptGraderInput,\n ScriptGraderInputSchema,\n type ScriptGraderResult,\n ScriptGraderResultSchema,\n} from './schemas.js';\n\n/**\n * Context provided to assertion handlers.\n */\nexport type AssertionContext = ScriptGraderInput;\n\n/**\n * Known built-in assertion types. Custom types are extensible via string.\n *\n * Use in EVAL.yaml `assert` blocks:\n * ```yaml\n * assert:\n * - type: contains\n * value: \"Paris\"\n * ```\n *\n * Custom types registered via `.agentv/assertions/` or `defineAssertion()`\n * are also valid — the `string & {}` escape hatch provides autocomplete\n * for known types while accepting any string.\n */\nexport type AssertionType =\n // kebab-case (canonical internal form)\n | 'llm-rubric'\n | 'agent-rubric'\n | 'script'\n | 'assert-set'\n /** @deprecated Authored eval YAML rejects this compatibility-only runtime type. */\n | 'tool-trajectory'\n | 'skill-used'\n | 'not-skill-used'\n | 'trajectory:tool-used'\n | 'trajectory:tool-args-match'\n | 'trajectory:tool-sequence'\n | 'trajectory:step-count'\n | 'trajectory:goal-success'\n | 'field-accuracy'\n | 'latency'\n | 'cost'\n | 'token-usage'\n | 'execution-metrics'\n | 'contains'\n | 'contains-any'\n | 'contains-all'\n | 'icontains'\n | 'icontains-any'\n | 'icontains-all'\n | 'starts-with'\n | 'ends-with'\n | 'equals'\n | 'regex'\n | 'is-json'\n | 'javascript'\n | 'python'\n | 'webhook'\n | 'similar'\n | (string & {});\n\n/**\n * Check returned from an assertion handler.\n */\nexport interface AssertionCheck {\n readonly id?: string;\n readonly text: string;\n readonly pass: boolean;\n readonly score?: number;\n readonly reason: string;\n readonly evidence?: string;\n}\n\n/**\n * Result returned from an assertion handler.\n *\n * @example Pass with score\n * ```ts\n * { pass: true, score: 1, reason: 'Output contains expected keywords' }\n * ```\n *\n * @example Fail with checks\n * ```ts\n * { pass: false, score: 0.3, reason: 'Missing required header', checks: [\n * { text: 'Header present', pass: false, reason: 'No header found' },\n * ] }\n * ```\n *\n * @example Granular score (0-1)\n * ```ts\n * { score: 0.75, reason: 'Two of three checks passed', checks: [\n * { text: 'Format correct', pass: true, reason: 'Matches expected format' },\n * { text: 'Content relevant', pass: true, reason: 'Addresses the request' },\n * { text: 'Citation present', pass: false, reason: 'Missing citation' },\n * ] }\n * ```\n */\nexport interface AssertionScore {\n /** Explicit pass/fail. If omitted, derived from score (>= 0.5 = pass). */\n readonly pass?: boolean;\n /** Numeric score between 0 and 1. Defaults to 1 if pass=true, 0 if pass=false. */\n readonly score?: number;\n /** Explanation for the aggregate pass/fail decision. */\n readonly reason?: string;\n /** Per-check verdicts with optional score and evidence. */\n readonly checks?: readonly AssertionCheck[];\n /** Optional structured details for domain-specific metrics. */\n readonly details?: Record<string, unknown>;\n}\n\n/**\n * Handler function type for assertions.\n */\nexport type AssertionHandler = (ctx: AssertionContext) => AssertionScore | Promise<AssertionScore>;\n\n/**\n * Read stdin synchronously.\n */\nfunction readStdin(): string {\n return readFileSync(0, 'utf8');\n}\n\n/**\n * Clamp a value to the range [0, 1].\n */\nfunction clampScore(value: number): number {\n if (Number.isNaN(value) || !Number.isFinite(value)) {\n return 0;\n }\n return Math.max(0, Math.min(1, value));\n}\n\nfunction formatError(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n}\n\n/**\n * Normalize an AssertionScore to a ScriptGraderResult for wire compatibility.\n */\nfunction normalizeScore(result: AssertionScore): ScriptGraderResult {\n let score: number;\n if (result.score !== undefined) {\n score = clampScore(result.score);\n } else if (result.pass !== undefined) {\n score = result.pass ? 1 : 0;\n } else {\n score = 0;\n }\n const pass = result.pass ?? score >= 0.5;\n\n return {\n pass,\n score,\n reason: result.reason ?? (pass ? 'Assertion passed' : 'Assertion failed'),\n checks: result.checks\n ? result.checks.map((check) => ({\n ...check,\n ...(check.score !== undefined ? { score: clampScore(check.score) } : {}),\n }))\n : [],\n details: result.details,\n };\n}\n\n/**\n * Run an assertion handler with full stdin/stdout handling.\n * This is the internal implementation called by defineAssertion.\n */\nexport async function runAssertion(handler: AssertionHandler): Promise<void> {\n try {\n const stdin = readStdin();\n const rawInput = JSON.parse(stdin) as Record<string, unknown>;\n const camelInput = toCamelCaseDeep(rawInput);\n const input = ScriptGraderInputSchema.parse(camelInput);\n\n // Lazy file-backed output loading\n if (input.outputPath && (input.output === null || input.output === undefined)) {\n let cachedOutput: ScriptGraderInput['output'] | undefined;\n const filePath = input.outputPath;\n Object.defineProperty(input, 'output', {\n get() {\n if (cachedOutput === undefined) {\n cachedOutput = JSON.parse(readFileSync(filePath, 'utf8'));\n }\n return cachedOutput;\n },\n configurable: true,\n enumerable: true,\n });\n }\n\n // Enrich input — no-op pass-through\n enrichInput(input);\n\n // Run handler\n const rawResult = await handler(input);\n const normalized = normalizeScore(rawResult);\n const result = ScriptGraderResultSchema.parse(normalized);\n console.log(JSON.stringify(result, null, 2));\n } catch (error) {\n const errorMessage = formatError(error);\n const errorResult: ScriptGraderResult = {\n pass: false,\n score: 0,\n reason: `Assertion failed: ${errorMessage}`,\n checks: [{ text: 'Assertion execution', pass: false, reason: errorMessage }],\n };\n console.log(JSON.stringify(errorResult, null, 2));\n process.exit(1);\n }\n}\n","/**\n * Input enrichment utilities for script grader and assertion runtimes.\n *\n * With the removal of text convenience accessors (`inputText`, `outputText`,\n * `expectedOutputText`) from ScriptGraderInput, this module is a no-op pass-through.\n * Kept for backward compatibility — existing runtimes call `enrichInput()` and\n * the call is harmless.\n */\nimport type { ScriptGraderInput } from './schemas.js';\n\n/**\n * Enrich a validated ScriptGraderInput.\n *\n * Previously populated text convenience accessors; now a no-op pass-through since\n * those fields were removed. script graders should extract text from `Message.content`\n * using `getTextContent()` from `agentv/contracts` instead.\n */\nexport function enrichInput(input: ScriptGraderInput): ScriptGraderInput {\n return input;\n}\n","/**\n * Runtime for prompt template evaluators.\n * Handles stdin parsing, validation, error handling, and string output.\n */\nimport { readFileSync } from 'node:fs';\nimport { toCamelCaseDeep } from '@agentv/core';\n\nimport { enrichInput } from './deprecation.js';\nimport { PromptTemplateInputSchema, type ScriptGraderInput } from './schemas.js';\n\n/**\n * Handler function type for prompt templates.\n * Returns the prompt string to use for evaluation.\n */\nexport type PromptTemplateHandler = (input: ScriptGraderInput) => string | Promise<string>;\n\n/**\n * Read stdin synchronously (works in both Node.js and Bun).\n */\nfunction readStdin(): string {\n return readFileSync(0, 'utf8');\n}\n\n/**\n * Run a prompt template handler with full stdin/stdout handling.\n * This is the internal implementation called by definePromptTemplate.\n */\nexport async function runPromptTemplate(handler: PromptTemplateHandler): Promise<void> {\n try {\n // 1. Read stdin\n const stdin = readStdin();\n\n // 2. Parse JSON\n const rawInput = JSON.parse(stdin) as Record<string, unknown>;\n\n // 3. Convert snake_case to camelCase\n const camelInput = toCamelCaseDeep(rawInput);\n\n // 4. Validate input with Zod\n const input = PromptTemplateInputSchema.parse(camelInput);\n\n // 5. Enrich input — no-op pass-through\n enrichInput(input);\n\n // 6. Run handler\n const prompt = await handler(input);\n\n // 6. Output raw string (not JSON) - the prompt itself\n console.log(prompt);\n } catch (error) {\n // Output error to stderr and exit with non-zero code\n console.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n}\n\n/**\n * Define a prompt template with automatic stdin/stdout handling.\n *\n * This function:\n * 1. Reads JSON from stdin (snake_case format)\n * 2. Converts to camelCase and validates with Zod\n * 3. Calls your handler with typed input\n * 4. Outputs the generated prompt string to stdout\n * 5. Handles errors gracefully with proper exit codes\n *\n * @param handler - Function that generates the prompt string from input\n *\n * @example\n * ```typescript\n * import { definePromptTemplate, type ScriptGraderInput } from 'agentv';\n *\n * export default definePromptTemplate((ctx: ScriptGraderInput) => {\n * const question = ctx.input\n * .filter((message) => message.role === 'user')\n * .map((message) => typeof message.content === 'string' ? message.content : '')\n * .join('\\n');\n * const answer = ctx.output ?? '';\n * return `Question: ${question}\\nAnswer: ${answer}`;\n * });\n * ```\n */\nexport function definePromptTemplate(handler: PromptTemplateHandler): void {\n // Run immediately when module is loaded\n runPromptTemplate(handler);\n}\n"],"mappings":"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","names":["readFileSync","check","readStdin","readFileSync","toCamelCaseDeep"]}