@leostera/evalkit 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +51 -0
- package/dist/cli.d.mts +1 -0
- package/dist/cli.mjs +9062 -0
- package/dist/cli.mjs.map +1 -0
- package/dist/dashboard/assets/index-B2P48MWY.css +1 -0
- package/dist/dashboard/assets/index-Z5UamLUC.js +261 -0
- package/dist/dashboard/index.html +13 -0
- package/dist/index-BwNYw4-_.d.mts +939 -0
- package/dist/index-BwNYw4-_.d.mts.map +1 -0
- package/dist/index.d.mts +12 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +79 -0
- package/dist/index.mjs.map +1 -0
- package/dist/runner.d.mts +290 -0
- package/dist/runner.d.mts.map +1 -0
- package/dist/runner.mjs +2 -0
- package/dist/src-CopGdrwX.mjs +674 -0
- package/dist/src-CopGdrwX.mjs.map +1 -0
- package/dist/src-DJDem6nZ.mjs +995 -0
- package/dist/src-DJDem6nZ.mjs.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"src-DJDem6nZ.mjs","names":["failure","failure"],"sources":["../../runner/src/errors.ts","../../runner/src/snapshot.ts","../../runner/src/workspace.ts","../../runner/src/score.ts","../../runner/src/judge-agent.ts","../../runner/src/evaluate-rule.ts","../../runner/src/turn.ts","../../runner/src/checkpoint.ts","../../runner/src/effect-boundary.ts","../../runner/src/transcript.ts","../../runner/src/final-scoring.ts","../../runner/src/local-report-store.ts","../../runner/src/local-report-reader.ts","../../runner/src/matrix.ts","../../runner/src/index.ts"],"sourcesContent":["import { Data } from 'effect';\n\nexport class AutExecutionError extends Data.TaggedError('AutExecutionError')<{\n cause: unknown;\n message?: string;\n}> {}\n\nexport class FixtureError extends Data.TaggedError('FixtureError')<{\n cause: unknown;\n message?: string;\n}> {}\n\nexport class ReportError extends Data.TaggedError('ReportError')<{\n cause: unknown;\n message?: string;\n}> {}\n\nexport class ScoringError extends Data.TaggedError('ScoringError')<{\n cause: unknown;\n message?: string;\n}> {}\n\nexport class RuleExecutionError extends Data.TaggedError('RuleExecutionError')<{\n name: string;\n message: string;\n cause: unknown;\n}> {}\n\nexport class CheckpointExecutionError extends Data.TaggedError(\n 'CheckpointExecutionError',\n)<{\n step: number;\n name: string;\n message: string;\n cause: unknown;\n}> {}\n","import { lstat, readdir, readFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport type { ArtifactEntry, TrialWriter } from '@evalkit/core';\n\n/**\n * Copies every regular file in the candidate workspace into the trial report.\n * Symbolic links are rejected so snapshots cannot follow paths outside the trial.\n */\nexport async function snapshotCandidateWorkspace(\n candidateRoot: string,\n writer: TrialWriter,\n): Promise<ArtifactEntry[]> {\n const artifacts: ArtifactEntry[] = [];\n\n async function visit(\n directory: string,\n relativeDirectory: string,\n ): Promise<void> {\n const entries = await readdir(directory, { withFileTypes: true });\n entries.sort((left, right) => left.name.localeCompare(right.name));\n\n for (const entry of entries) {\n const absolutePath = path.join(directory, entry.name);\n const relativePath = path.join(relativeDirectory, entry.name);\n const stat = await lstat(absolutePath);\n\n if (stat.isSymbolicLink()) {\n throw new Error(\n `Candidate workspace contains a symbolic link: ${relativePath}`,\n );\n }\n if (stat.isDirectory()) {\n artifacts.push({\n path: path.join('candidate', relativePath),\n kind: 'directory',\n });\n await visit(absolutePath, relativePath);\n continue;\n }\n if (!stat.isFile()) {\n throw new Error(\n `Candidate workspace contains an unsupported entry: ${relativePath}`,\n );\n }\n\n const data = await readFile(absolutePath);\n const artifactPath = path.join('candidate', relativePath);\n await writer.writeArtifact(artifactPath, data);\n artifacts.push({\n path: artifactPath,\n kind: 'file',\n size: data.byteLength,\n });\n }\n }\n\n await visit(candidateRoot, '');\n return artifacts;\n}\n","import { copyFile, cp, mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\nimport type {\n ArtifactView,\n AutContext,\n Fixture,\n FixtureContext,\n FixtureVisibility,\n} from '@evalkit/core';\n\nconst MAX_DYNAMIC_FIXTURE_DEPTH = 16;\n\nexport type TrialWorkspace = {\n artifacts: ArtifactView;\n cleanup(): Promise<void>;\n};\n\nfunction workspaceRoot(\n visibility: FixtureVisibility,\n artifacts: ArtifactView,\n): string {\n return visibility === 'candidate'\n ? artifacts.candidate.root\n : artifacts.evaluator.root;\n}\n\nfunction destinationPath(root: string, destination: string): string {\n if (!destination || path.isAbsolute(destination)) {\n throw new Error(\n `Fixture destination must be a non-empty relative path: ${destination}`,\n );\n }\n\n const normalized = path.normalize(destination);\n if (normalized === '..' || normalized.startsWith(`..${path.sep}`)) {\n throw new Error(\n `Fixture destination escapes its workspace: ${destination}`,\n );\n }\n\n return path.join(root, normalized);\n}\n\nasync function resolveFixtures(\n fixtures: readonly Fixture[],\n context: FixtureContext,\n depth = 0,\n): Promise<Exclude<Fixture, { kind: 'dynamic' }>[]> {\n if (depth > MAX_DYNAMIC_FIXTURE_DEPTH) {\n throw new Error('Dynamic fixture nesting exceeds the supported depth');\n }\n\n const resolved: Exclude<Fixture, { kind: 'dynamic' }>[] = [];\n for (const fixture of fixtures) {\n if (fixture.kind !== 'dynamic') {\n resolved.push(fixture);\n continue;\n }\n\n const created = await fixture.create(context);\n const nested = Array.isArray(created) ? created : [created];\n resolved.push(...(await resolveFixtures(nested, context, depth + 1)));\n }\n return resolved;\n}\n\nfunction assertUniqueDestinations(\n fixtures: readonly Exclude<Fixture, { kind: 'dynamic' }>[],\n): void {\n const destinations = new Set<string>();\n for (const fixture of fixtures) {\n const destination = fixture.kind === 'inline' ? fixture.file : fixture.dst;\n const key = `${fixture.visibility}:${destination}`;\n if (destinations.has(key)) {\n throw new Error(\n `Duplicate ${fixture.visibility} fixture destination: ${destination}`,\n );\n }\n destinations.add(key);\n }\n}\n\n/** Creates isolated candidate and evaluator directories and materializes fixtures into each. */\nfunction trialDirectoryName(trialId: string): string {\n return trialId.replace(/[^a-zA-Z0-9._-]/g, '_');\n}\n\nexport async function createTrialWorkspace(\n context: FixtureContext,\n fixtures: readonly Fixture[] = [],\n persistentRoot?: string,\n): Promise<TrialWorkspace> {\n const root = persistentRoot\n ? path.join(\n path.resolve(persistentRoot),\n trialDirectoryName(context.trialId),\n )\n : await mkdtemp(path.join(os.tmpdir(), 'evalkit-trial-'));\n const persistent = persistentRoot !== undefined;\n const artifacts: ArtifactView = {\n candidate: { root: path.join(root, 'candidate') },\n evaluator: { root: path.join(root, 'evaluator') },\n };\n\n try {\n await Promise.all([\n mkdir(artifacts.candidate.root, { recursive: true }),\n mkdir(artifacts.evaluator.root, { recursive: true }),\n ]);\n\n const resolved = await resolveFixtures(fixtures, context);\n assertUniqueDestinations(resolved);\n\n for (const fixture of resolved) {\n const target = destinationPath(\n workspaceRoot(fixture.visibility, artifacts),\n fixture.kind === 'inline' ? fixture.file : fixture.dst,\n );\n await mkdir(path.dirname(target), { recursive: true });\n\n if (fixture.kind === 'directory') {\n await cp(fixture.src, target, {\n recursive: true,\n force: false,\n errorOnExist: true,\n });\n } else if (fixture.kind === 'file') {\n await copyFile(fixture.src, target);\n } else {\n await writeFile(target, fixture.data);\n }\n }\n\n return {\n artifacts,\n // Persistent local workspaces are intentionally retained for debugging.\n cleanup: persistent\n ? async () => {}\n : () => rm(root, { recursive: true, force: true }),\n };\n } catch (error) {\n await rm(root, { recursive: true, force: true });\n throw error;\n }\n}\n\n/** Exposed for adapters that need the candidate workspace capability from an AUT context. */\nexport function candidateWorkspace(context: AutContext): string {\n return context.workspace.root;\n}\n","import type { ScoreResult, ScoreValue } from '@evalkit/core';\n\n/** Shared normalization for inline and final predicate and judge rules. */\nexport function normalizeScore(\n value: ScoreValue | boolean,\n): Omit<ScoreResult, 'name' | 'kind' | 'durationMs'> {\n const normalized =\n typeof value === 'boolean'\n ? { value: Number(value) }\n : typeof value === 'number'\n ? { value }\n : value;\n if (\n !normalized ||\n !Number.isFinite(normalized.value) ||\n normalized.value < 0 ||\n normalized.value > 1\n )\n throw new Error(\n `Score value must be a finite number from 0 to 1; received ${normalized?.value}`,\n );\n if ('judge' in normalized && normalized.judge) {\n const { usage } = normalized.judge;\n if (\n usage &&\n Object.values(usage).some(\n (tokens) => !Number.isSafeInteger(tokens) || tokens < 0,\n )\n )\n throw new Error('Judge token usage must contain nonnegative integers');\n }\n return {\n value: normalized.value,\n passed: normalized.passed ?? normalized.value === 1,\n ...(normalized.explanation ? { explanation: normalized.explanation } : {}),\n ...(normalized.evidence === undefined\n ? {}\n : { evidence: normalized.evidence }),\n ...('judge' in normalized && normalized.judge !== undefined\n ? { judge: normalized.judge }\n : {}),\n };\n}\n","import { Effect } from 'effect';\nimport * as Schema from 'effect/Schema';\nimport {\n JsonValueSchema,\n TrajectoryEventSchema,\n type AutAdapter,\n type AutContext,\n type AutEvent,\n type JudgeRule,\n type JudgeRunInfo,\n type JsonValue,\n type ScoreValue,\n type ScoringContext,\n} from '@evalkit/core';\nimport { RuleExecutionError } from './errors.js';\n\nconst failure = (name: string, cause: unknown) =>\n new RuleExecutionError({\n name,\n cause,\n message: cause instanceof Error ? cause.message : String(cause),\n });\n\n/** Drive a distinct agent session for one assessment; do not add its events to AUT trajectory. */\nexport function runJudgeAgent(\n rule: JudgeRule,\n agent: AutAdapter,\n input: ScoringContext,\n placement: 'transcript' | 'scoring',\n): Effect.Effect<\n { value: ScoreValue | boolean; judge: JudgeRunInfo },\n RuleExecutionError\n> {\n const events: AutEvent[] = [];\n const context: AutContext = {\n ...input.context,\n // Judge tools operate in evaluator space, not the candidate's mutable workspace.\n workspace: input.artifacts.evaluator,\n evaluatorWorkspace: input.artifacts.evaluator,\n };\n const prompt = JSON.stringify({\n name: rule.name,\n rubric: rule.rubric,\n placement,\n evidence:\n placement === 'transcript'\n ? { turn: input.turn?.events ?? [] }\n : { trajectory: input.trajectory.events },\n instruction:\n 'Return only a JSON verdict with value (a number from 0 to 1), optional passed, explanation, and evidence.',\n });\n let closeError: RuleExecutionError | undefined;\n return Effect.gen(function* () {\n yield* Effect.acquireUseRelease(\n Effect.tryPromise({\n try: () =>\n agent.start({\n context,\n onEvent: (event) => {\n // Validate normalized judge observations before persisting them separately.\n const observed = Schema.decodeUnknownSync(TrajectoryEventSchema)({\n ...event,\n source: 'aut',\n });\n if (observed.source !== 'aut')\n throw new Error('Invalid judge event source');\n const { source: _, ...validated } = observed;\n events.push(validated);\n },\n }),\n catch: (cause) => failure(rule.name, cause),\n }),\n (session) =>\n Effect.tryPromise({\n try: () => session.send(prompt),\n catch: (cause) => failure(rule.name, cause),\n }),\n (session) =>\n Effect.tryPromise({\n try: () => session.close(),\n catch: (cause) => failure(rule.name, cause),\n }).pipe(\n Effect.catchAll((error) =>\n Effect.sync(() => {\n closeError = error;\n }),\n ),\n ),\n );\n if (closeError) return yield* Effect.fail(closeError);\n const completed = events\n .slice()\n .reverse()\n .find(\n (event) => event.kind === 'completed' && event.output !== undefined,\n );\n const assistant = events\n .slice()\n .reverse()\n .find((event) => event.kind === 'message' && event.role === 'assistant');\n const output =\n completed?.kind === 'completed'\n ? completed.output\n : assistant?.kind === 'message'\n ? assistant.content\n : undefined;\n if (output === undefined)\n return yield* Effect.fail(\n failure(rule.name, new Error('Judge agent did not emit a verdict')),\n );\n const value = yield* Effect.try({\n try: () =>\n typeof output === 'string' ? (JSON.parse(output) as unknown) : output,\n catch: (cause) => failure(rule.name, cause),\n });\n const encodedEvents = yield* Schema.decodeUnknown(JsonValueSchema)(\n events,\n ).pipe(Effect.mapError((cause) => failure(rule.name, cause)));\n if (!Array.isArray(encodedEvents))\n return yield* Effect.fail(\n failure(rule.name, new Error('Judge events must be an array')),\n );\n const usage = events\n .slice()\n .reverse()\n .find((event) => event.kind === 'turn-completed' && event.usage);\n return {\n value: value as ScoreValue | boolean, // normalized and Schema-validated by the shared rule evaluator\n judge: {\n ...(agent.identity ? { agent: agent.identity } : {}),\n ...(usage?.kind === 'turn-completed' && usage.usage\n ? { usage: usage.usage }\n : {}),\n events: encodedEvents as JsonValue[],\n },\n };\n });\n}\n","import { Effect } from 'effect';\nimport * as Schema from 'effect/Schema';\nimport {\n ScoreResultSchema,\n type AutAdapter,\n type ScoreResult,\n type ScoringContext,\n type ScoringRule,\n} from '@evalkit/core';\nimport { RuleExecutionError } from './errors.js';\nimport { normalizeScore } from './score.js';\nimport { runJudgeAgent } from './judge-agent.js';\n\nconst failure = (name: string, cause: unknown) =>\n new RuleExecutionError({\n name,\n cause,\n message: cause instanceof Error ? cause.message : String(cause),\n });\n\n/** Both placements call the same rule executor; only input timing and persistence differ. */\nexport function evaluateRule(\n rule: ScoringRule,\n input: ScoringContext,\n judgeAgent: AutAdapter | undefined,\n placement: 'transcript' | 'scoring',\n): Effect.Effect<\n Omit<ScoreResult, 'name' | 'kind' | 'durationMs'>,\n RuleExecutionError\n> {\n return Effect.gen(function* () {\n if (rule.kind === 'judge' && !judgeAgent)\n return yield* Effect.fail(\n failure(\n rule.name,\n new Error('Judge rules require an eval judge agent'),\n ),\n );\n const evaluated =\n rule.kind === 'predicate'\n ? {\n value: yield* Effect.tryPromise({\n try: async () => rule.run(input),\n catch: (cause) => failure(rule.name, cause),\n }),\n }\n : yield* runJudgeAgent(rule, judgeAgent!, input, placement);\n const score = yield* Effect.try({\n try: () => normalizeScore(evaluated.value),\n catch: (cause) => failure(rule.name, cause),\n });\n const withJudge =\n rule.kind === 'judge' && 'judge' in evaluated\n ? { ...score, judge: evaluated.judge }\n : score;\n const validated = yield* Schema.decodeUnknown(ScoreResultSchema)({\n name: rule.name,\n kind: rule.kind,\n durationMs: 0,\n ...withJudge,\n }).pipe(Effect.mapError((cause) => failure(rule.name, cause)));\n return {\n value: validated.value!,\n passed: validated.passed!,\n ...(validated.explanation === undefined\n ? {}\n : { explanation: validated.explanation }),\n ...(validated.evidence === undefined\n ? {}\n : { evidence: validated.evidence }),\n ...(validated.judge === undefined ? {} : { judge: validated.judge }),\n };\n });\n}\n","import {\n canonicalParameters,\n type AutEvent,\n type JsonValue,\n type TrajectoryEvent,\n type TurnView,\n} from '@evalkit/core';\n\ntype AutTrajectoryEvent = AutEvent & { source: 'aut' };\n\n/** Freeze the observation window at send() completion, before checkpoint events arrive. */\nexport function turnView(\n events: readonly TrajectoryEvent[],\n start: number,\n end: number,\n userStepIndex: number,\n): TurnView {\n const window = events.slice(start, end);\n const autEvents = window.filter(\n (event): event is AutTrajectoryEvent => event.source === 'aut',\n );\n const assistantMessages = autEvents.filter(\n (\n event,\n ): event is Extract<AutEvent, { kind: 'message' }> & {\n role: 'assistant';\n source: 'aut';\n } => event.kind === 'message' && event.role === 'assistant',\n );\n const calls = window.flatMap((event, index) =>\n event.source === 'aut' && event.kind === 'tool-call'\n ? [{ event, eventIndex: start + index }]\n : [],\n );\n const results = autEvents.filter(\n (\n event,\n ): event is Extract<AutEvent, { kind: 'tool-result' }> & {\n source: 'aut';\n } => event.kind === 'tool-result',\n );\n return {\n userStepIndex,\n events: autEvents,\n assistantMessages,\n toolCalls: calls.map(({ event, eventIndex }) => {\n const matches = results.filter((result) => result.id === event.id);\n const ambiguous =\n calls.filter((call) => call.event.id === event.id).length !== 1 ||\n matches.length > 1;\n return {\n eventIndex,\n id: event.id,\n name: event.name,\n arguments: event.arguments,\n resultObservation: ambiguous\n ? ('ambiguous' as const)\n : matches.length\n ? ('observed' as const)\n : ('absent' as const),\n ...(!ambiguous && matches.length ? { result: matches[0]!.result } : {}),\n };\n }),\n ...(typeof assistantMessages.at(-1)?.content === 'string'\n ? { lastAssistantText: assistantMessages.at(-1)!.content as string }\n : {}),\n };\n}\n\n/** Exact JSON matching: object keys do not matter, array order does. */\nexport function matchingToolCall(\n turn: TurnView,\n name: string,\n args?: JsonValue,\n) {\n const expected = args === undefined ? undefined : canonicalParameters(args);\n return turn.toolCalls.find(\n (call) =>\n call.name === name &&\n (expected === undefined ||\n canonicalParameters(call.arguments) === expected),\n );\n}\n","import { Effect } from 'effect';\nimport * as Schema from 'effect/Schema';\nimport {\n CheckpointResultSchema,\n type ArtifactView,\n type AutContext,\n type ScoringRule,\n type AutAdapter,\n type ExpectToolCallStep,\n type TrajectoryEvent,\n type TurnView,\n type CheckpointResult,\n} from '@evalkit/core';\nimport { CheckpointExecutionError } from './errors.js';\nimport { normalizeScore } from './score.js';\nimport { evaluateRule } from './evaluate-rule.js';\nimport { matchingToolCall } from './turn.js';\n\nconst failure = (step: number, name: string, cause: unknown) =>\n new CheckpointExecutionError({\n step,\n name,\n cause,\n message: cause instanceof Error ? cause.message : String(cause),\n });\n\n/** An assertion failure is a successful Effect containing a failed result; only execution errors enter the error channel. */\nexport function evaluateCheckpoint(\n step: ScoringRule | ExpectToolCallStep,\n index: number,\n input: {\n context: AutContext;\n artifacts: ArtifactView;\n trajectory: { events: readonly TrajectoryEvent[] };\n turn: TurnView;\n },\n now: () => Date,\n judgeAgent?: AutAdapter,\n): Effect.Effect<\n CheckpointResult & { status: 'passed' | 'failed' },\n CheckpointExecutionError\n> {\n const annotations = {\n evalId: input.context.evalId,\n runId: input.context.runId,\n trialId: input.context.trialId,\n step: index,\n checkpoint: step.name,\n };\n return Effect.gen(function* () {\n const started = now();\n yield* Effect.logDebug('checkpoint started');\n const match =\n step.kind === 'expect-tool-call'\n ? yield* Effect.try({\n try: () =>\n matchingToolCall(\n input.turn,\n step.expected.name,\n step.expected.arguments,\n ),\n catch: (cause) => failure(index, step.name, cause),\n })\n : undefined;\n const score =\n step.kind === 'expect-tool-call'\n ? yield* Effect.try({\n try: () => normalizeScore(Boolean(match)),\n catch: (cause) => failure(index, step.name, cause),\n })\n : yield* evaluateRule(step, input, judgeAgent, 'transcript').pipe(\n Effect.mapError((cause) => failure(index, step.name, cause)),\n );\n const result = yield* Schema.decodeUnknown(CheckpointResultSchema)({\n step: index,\n kind: step.kind,\n name: step.name,\n status: score.passed ? 'passed' : 'failed',\n durationMs: now().getTime() - started.getTime(),\n ...score,\n ...(match\n ? { matchedToolCall: { eventIndex: match.eventIndex, id: match.id } }\n : {}),\n }).pipe(Effect.mapError((cause) => failure(index, step.name, cause)));\n yield* Effect.logInfo('checkpoint completed').pipe(\n Effect.annotateLogs({ status: result.status }),\n );\n return {\n ...result,\n status: score.passed ? ('passed' as const) : ('failed' as const),\n };\n }).pipe(\n Effect.tapError((error) =>\n Effect.logError('checkpoint execution error').pipe(\n Effect.annotateLogs({ errorName: error._tag }),\n ),\n ),\n Effect.annotateLogs(annotations),\n );\n}\n","import { Effect, Either } from 'effect';\n\n/** Keep tagged Effect failures intact when bridging into the legacy async reporting lifecycle. Defects still reject. */\nexport async function runBoundary<A, E>(\n effect: Effect.Effect<A, E>,\n): Promise<A> {\n const outcome = await Effect.runPromise(Effect.either(effect));\n if (Either.isLeft(outcome)) throw outcome.left;\n return outcome.right;\n}\n","import { Effect } from 'effect';\nimport {\n recordError,\n type AutContext,\n type AutSession,\n type CheckpointResult,\n type EvalDefinition,\n type RunnerEvent,\n type TrajectoryEvent,\n type TurnView,\n} from '@evalkit/core';\nimport { evaluateCheckpoint } from './checkpoint.js';\nimport { runBoundary } from './effect-boundary.js';\nimport { AutExecutionError, ReportError } from './errors.js';\nimport { turnView } from './turn.js';\nimport type { TrialWorkspace } from './workspace.js';\n\n/** Progress survives a failed step so partial scoring can see completed turns and checkpoints. */\nexport type TranscriptProgress = {\n checkpoints: CheckpointResult[];\n lastTurn?: TurnView;\n stoppedEarly: boolean;\n};\n\ntype TranscriptExecution = {\n context: AutContext;\n artifacts: TrialWorkspace['artifacts'];\n events: TrajectoryEvent[];\n now: () => Date;\n randomSeed: number;\n emitRunner: (event: RunnerEvent) => Promise<void>;\n progress: TranscriptProgress;\n};\n\nexport async function executeTranscript(\n definition: EvalDefinition,\n session: AutSession,\n input: TranscriptExecution,\n): Promise<void> {\n const { now, emitRunner, progress } = input;\n for (const [index, step] of definition.transcript.entries()) {\n await emitRunner({\n kind: 'transcript-step-started',\n step: index,\n timestamp: now().toISOString(),\n });\n if (step.kind === 'user') {\n const cursor = input.events.length;\n await sendUserTurn(\n session,\n step.message.replaceAll('{{randomSeed}}', String(input.randomSeed)),\n );\n progress.lastTurn = turnView(\n input.events,\n cursor,\n input.events.length,\n index,\n );\n } else if (\n step.kind === 'predicate' ||\n step.kind === 'judge' ||\n step.kind === 'expect-tool-call'\n ) {\n const result = await runCheckpoint(definition, step, index, input);\n progress.checkpoints.push(result);\n await emitRunner({\n kind: 'checkpoint-completed',\n step: index,\n status: result.status,\n timestamp: now().toISOString(),\n });\n await emitRunner({\n kind: 'transcript-step-completed',\n step: index,\n timestamp: now().toISOString(),\n });\n if (!result.passed && definition.policy?.failfast) {\n progress.stoppedEarly = true;\n await skipRemainingSteps(definition, index, input);\n break;\n }\n continue;\n } else {\n throw new Error(\n `Transcript step kind \"${step.kind}\" is not executable yet`,\n );\n }\n await emitRunner({\n kind: 'transcript-step-completed',\n step: index,\n timestamp: now().toISOString(),\n });\n }\n}\n\nasync function sendUserTurn(\n session: AutSession,\n message: string,\n): Promise<void> {\n await runBoundary(\n Effect.tryPromise({\n try: () => session.send(message),\n catch: (cause) =>\n cause instanceof ReportError\n ? cause\n : new AutExecutionError({\n cause,\n message: cause instanceof Error ? cause.message : String(cause),\n }),\n }),\n );\n}\n\ntype CheckpointStep = Extract<\n EvalDefinition['transcript'][number],\n { kind: 'predicate' | 'judge' | 'expect-tool-call' }\n>;\n\nasync function runCheckpoint(\n definition: EvalDefinition,\n step: CheckpointStep,\n index: number,\n input: TranscriptExecution,\n): Promise<CheckpointResult & { status: 'passed' | 'failed' }> {\n const { now, emitRunner, progress } = input;\n if (!progress.lastTurn)\n throw new Error('Checkpoint requires a preceding user step');\n const started = now();\n await emitRunner({\n kind: 'checkpoint-started',\n step: index,\n name: step.name,\n timestamp: started.toISOString(),\n });\n return runBoundary(\n evaluateCheckpoint(\n step,\n index,\n {\n context: input.context,\n artifacts: input.artifacts,\n trajectory: { events: input.events },\n turn: progress.lastTurn,\n },\n now,\n definition.judge,\n ),\n ).catch(async (error: unknown) => {\n const recorded = recordError(error);\n progress.checkpoints.push({\n step: index,\n kind: step.kind,\n name: step.name,\n status: 'error',\n durationMs: now().getTime() - started.getTime(),\n error: recorded,\n });\n try {\n await emitRunner({\n kind: 'checkpoint-error',\n step: index,\n error: recorded,\n timestamp: now().toISOString(),\n });\n } catch {\n // Preserve the checkpoint error if the writer also fails.\n }\n throw error;\n });\n}\n\nasync function skipRemainingSteps(\n definition: EvalDefinition,\n after: number,\n { now, emitRunner, progress }: TranscriptExecution,\n): Promise<void> {\n for (let index = after + 1; index < definition.transcript.length; index++) {\n await emitRunner({\n kind: 'transcript-step-skipped',\n step: index,\n timestamp: now().toISOString(),\n });\n const step = definition.transcript[index]!;\n if (\n step.kind === 'predicate' ||\n step.kind === 'judge' ||\n step.kind === 'expect-tool-call'\n )\n progress.checkpoints.push({\n step: index,\n kind: step.kind,\n name: step.name,\n status: 'skipped',\n });\n }\n}\n","import { Effect } from 'effect';\nimport {\n recordError,\n type AutContext,\n type CheckpointResult,\n type EvalDefinition,\n type RunnerEvent,\n type ScoreResult,\n type TrajectoryEvent,\n type TrialScoring,\n type TurnView,\n} from '@evalkit/core';\nimport { runBoundary } from './effect-boundary.js';\nimport { ScoringError } from './errors.js';\nimport { evaluateRule } from './evaluate-rule.js';\nimport type { TrialWorkspace } from './workspace.js';\n\nexport function scoreSummary(\n results: ScoreResult[],\n checkpoints: CheckpointResult[],\n skippedScorers: string[],\n): TrialScoring {\n const valid = results.filter((result) => result.value !== undefined);\n const hasError = results.some((result) => result.error !== undefined);\n return {\n results,\n ...(checkpoints.length ? { checkpoints } : {}),\n ...(skippedScorers.length ? { skippedScorers } : {}),\n ...(valid.length === 0\n ? {}\n : {\n overall:\n valid.reduce((sum, result) => sum + (result.value ?? 0), 0) /\n valid.length,\n }),\n passed:\n !hasError &&\n results.every((result) => result.passed === true) &&\n checkpoints.every((result) => result.status === 'passed') &&\n !skippedScorers.length,\n };\n}\n\ntype FinalScoringInput = {\n context?: AutContext;\n workspace?: TrialWorkspace;\n events: TrajectoryEvent[];\n lastTurn?: TurnView;\n primaryError?: unknown;\n stoppedEarly: boolean;\n reportingFailed: boolean;\n results: ScoreResult[];\n skippedScorers: string[];\n now: () => Date;\n emitRunner: (event: RunnerEvent) => Promise<void>;\n};\n\n/** Append completed scores to the supplied arrays, even when a later scorer or report write fails. */\nexport async function evaluateFinalScorers(\n definition: EvalDefinition,\n input: FinalScoringInput,\n): Promise<void> {\n const {\n context,\n workspace,\n events,\n lastTurn,\n results,\n skippedScorers,\n now,\n emitRunner,\n } = input;\n for (const scorer of definition.scoring) {\n if (\n input.reportingFailed ||\n !context ||\n !workspace ||\n ((input.primaryError || input.stoppedEarly) &&\n (!('supportsPartial' in scorer) || !scorer.supportsPartial))\n ) {\n skippedScorers.push(scorer.name);\n continue;\n }\n const started = now();\n await emitRunner({\n kind: 'scorer-started',\n scorer: scorer.name,\n timestamp: started.toISOString(),\n });\n let result: ScoreResult;\n try {\n const score = await runBoundary(\n evaluateRule(\n scorer,\n {\n context,\n artifacts: workspace.artifacts,\n trajectory: { events },\n ...(lastTurn ? { turn: lastTurn } : {}),\n },\n definition.judge,\n 'scoring',\n ).pipe(\n Effect.mapError(\n (cause) => new ScoringError({ cause, message: cause.message }),\n ),\n ),\n );\n result = {\n name: scorer.name,\n kind: scorer.kind,\n durationMs: now().getTime() - started.getTime(),\n ...score,\n };\n results.push(result);\n } catch (error) {\n const recorded = recordError(error);\n results.push({\n name: scorer.name,\n kind: scorer.kind,\n durationMs: now().getTime() - started.getTime(),\n error: recorded,\n passed: false,\n });\n await emitRunner({\n kind: 'scorer-failed',\n scorer: scorer.name,\n error: recorded,\n timestamp: now().toISOString(),\n });\n continue;\n }\n await emitRunner({\n kind: 'scorer-completed',\n scorer: scorer.name,\n value: result.value ?? 0,\n timestamp: now().toISOString(),\n });\n }\n}\n","import { appendFile, mkdir, rename, writeFile } from 'node:fs/promises';\nimport { randomUUID } from 'node:crypto';\nimport path from 'node:path';\nimport * as Schema from 'effect/Schema';\nimport {\n RunMetadataSchema,\n RunSummarySchema,\n TrialMetadataSchema,\n TrialScoringSchema,\n TrialSummarySchema,\n TrajectoryEventSchema,\n} from '@evalkit/core';\nimport type {\n ReportStore,\n RunMetadata,\n RunSummary,\n RunWriter,\n TrialMetadata,\n TrialScoring,\n TrialSummary,\n TrialWriter,\n TrajectoryEvent,\n} from '@evalkit/core';\n\nconst MANIFEST_FILE = 'manifest.json';\n\nasync function writeJson(filePath: string, value: unknown): Promise<void> {\n await writeFile(filePath, `${JSON.stringify(value, null, 2)}\\n`);\n}\n\nasync function replaceJson(filePath: string, value: unknown): Promise<void> {\n const temporary = `${filePath}.${randomUUID()}.tmp`;\n await writeJson(temporary, value);\n await rename(temporary, filePath);\n}\n\nfunction assertPathSegment(value: string, name: string): void {\n if (\n !value ||\n value === '.' ||\n value === '..' ||\n value.includes('/') ||\n value.includes('\\\\')\n ) {\n throw new Error(`${name} must be a single relative path segment`);\n }\n}\n\nfunction artifactPath(root: string, value: string): string {\n if (!value || path.isAbsolute(value)) {\n throw new Error(\n `Artifact path must be a non-empty relative path: ${value}`,\n );\n }\n const normalized = path.normalize(value);\n if (normalized === '..' || normalized.startsWith(`..${path.sep}`)) {\n throw new Error(`Artifact path escapes its root: ${value}`);\n }\n return path.join(root, normalized);\n}\n\nclass LocalTrialWriter implements TrialWriter {\n constructor(\n private readonly directory: string,\n private readonly metadata: TrialMetadata,\n ) {}\n\n appendEvent(event: TrajectoryEvent): Promise<void> {\n return appendFile(\n path.join(this.directory, 'trajectory.jsonl'),\n `${JSON.stringify(Schema.encodeSync(TrajectoryEventSchema)(event))}\\n`,\n );\n }\n\n writeScores(scoring: TrialScoring): Promise<void> {\n return writeJson(\n path.join(this.directory, 'scoring.json'),\n Schema.encodeSync(TrialScoringSchema)(scoring),\n );\n }\n\n async writeArtifact(relativePath: string, data: Uint8Array): Promise<void> {\n const target = artifactPath(\n path.join(this.directory, 'artifacts'),\n relativePath,\n );\n await mkdir(path.dirname(target), { recursive: true });\n await writeFile(target, data);\n }\n\n async finalize(summary: TrialSummary): Promise<void> {\n await writeJson(\n path.join(this.directory, 'summary.json'),\n Schema.encodeSync(TrialSummarySchema)(summary),\n );\n await replaceJson(path.join(this.directory, MANIFEST_FILE), {\n ...Schema.encodeSync(TrialMetadataSchema)(this.metadata),\n status: summary.status,\n });\n }\n}\n\nclass LocalRunWriter implements RunWriter {\n constructor(\n readonly location: string,\n private readonly directory: string,\n private readonly metadata: RunMetadata,\n ) {}\n\n async startTrial(metadata: TrialMetadata): Promise<TrialWriter> {\n assertPathSegment(metadata.trialId, 'trialId');\n const directory = path.join(this.directory, 'trials', metadata.trialId);\n await mkdir(directory, { recursive: true });\n await writeJson(path.join(directory, MANIFEST_FILE), {\n ...Schema.encodeSync(TrialMetadataSchema)(metadata),\n status: 'running',\n });\n return new LocalTrialWriter(directory, metadata);\n }\n\n async finalize(summary: RunSummary): Promise<void> {\n await writeJson(\n path.join(this.directory, 'summary.json'),\n Schema.encodeSync(RunSummarySchema)(summary),\n );\n await replaceJson(path.join(this.directory, MANIFEST_FILE), {\n ...Schema.encodeSync(RunMetadataSchema)(this.metadata),\n status: summary.status,\n });\n }\n}\n\n/** Persists each run as a local tree rooted below `rootDirectory`. */\nexport function localReportStore(rootDirectory: string): ReportStore {\n return {\n async startRun(metadata: RunMetadata): Promise<RunWriter> {\n assertPathSegment(metadata.runId, 'runId');\n const directory = path.resolve(rootDirectory, metadata.runId);\n await mkdir(directory, { recursive: true });\n await writeJson(path.join(directory, MANIFEST_FILE), {\n ...Schema.encodeSync(RunMetadataSchema)(metadata),\n status: 'running',\n });\n return new LocalRunWriter(\n path.relative(process.cwd(), directory),\n directory,\n metadata,\n );\n },\n };\n}\n","import { readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport * as Schema from 'effect/Schema';\nimport {\n RunManifestSchema,\n RunSummarySchema,\n TrialManifestSchema,\n TrialSummarySchema,\n TrialScoringSchema,\n parseTrajectoryJsonl,\n} from '@evalkit/core';\n\n/** Shared v2/v3 local report boundary for CLI, dashboard, and CI consumers. */\nasync function decode<A, I>(\n file: string,\n schema: Schema.Schema<A, I>,\n): Promise<A> {\n return Schema.decodeUnknownSync(schema)(\n JSON.parse(await readFile(file, 'utf8')),\n );\n}\n\nexport const readRunManifest = (root: string, runId: string) =>\n decode(join(root, runId, 'manifest.json'), RunManifestSchema);\nexport const readRunSummary = (root: string, runId: string) =>\n decode(join(root, runId, 'summary.json'), RunSummarySchema);\nexport const readTrialManifest = (\n root: string,\n runId: string,\n trialId: string,\n) =>\n decode(\n join(root, runId, 'trials', trialId, 'manifest.json'),\n TrialManifestSchema,\n );\nexport const readTrialSummary = (\n root: string,\n runId: string,\n trialId: string,\n) =>\n decode(\n join(root, runId, 'trials', trialId, 'summary.json'),\n TrialSummarySchema,\n );\nexport const readTrialScoring = (\n root: string,\n runId: string,\n trialId: string,\n) =>\n decode(\n join(root, runId, 'trials', trialId, 'scoring.json'),\n TrialScoringSchema,\n );\nexport async function readTrialEvents(\n root: string,\n runId: string,\n trialId: string,\n) {\n return parseTrajectoryJsonl(\n await readFile(\n join(root, runId, 'trials', trialId, 'trajectory.jsonl'),\n 'utf8',\n ),\n );\n}\n","import { Effect } from 'effect';\nimport type {\n EvalMatrix,\n EvalMatrixCell,\n MatrixSelection,\n RunResult,\n} from '@evalkit/core';\nimport { runEval, type RunEvalOptions } from './index.js';\n\n/** Bounded workers pull cells from the iterator; no Cartesian job array is allocated. */\nexport function runMatrix(\n matrix: EvalMatrix,\n options: Omit<\n RunEvalOptions,\n 'runId' | 'trialId' | 'parameters' | 'matrix'\n > & {\n selection?: MatrixSelection;\n onResult?: (\n cell: EvalMatrixCell,\n result: RunResult,\n ) => void | Promise<void>;\n },\n): Effect.Effect<{ cells: number; passed: number; failed: number }, unknown> {\n return Effect.gen(function* () {\n const concurrency = options.concurrency ?? 4;\n if (!Number.isSafeInteger(concurrency) || concurrency < 1)\n throw new Error('Concurrency must be a positive integer');\n const count = matrix.count(options.selection);\n const iterator = matrix.cells(options.selection);\n const summary = { cells: 0, passed: 0, failed: 0 };\n yield* Effect.all(\n Array.from({ length: Math.min(count, concurrency) }, () =>\n Effect.gen(function* () {\n while (true) {\n const next = iterator.next();\n if (next.done) return;\n const cell = next.value;\n const runtime =\n options.runtime ??\n (['local', 'remote', 'sandbox'] as const).find(\n (name) => cell.eval.agent.runtimes?.[name],\n );\n const result = yield* runEval(cell.eval, {\n ...options,\n concurrency: 1,\n runtime,\n parameters: cell.parameters,\n matrix: { id: matrix.id, cellKey: cell.key },\n });\n summary.cells++;\n if (\n result.status === 'completed' &&\n (result.aggregateScoring?.passRate === 1 ||\n result.scoring?.passed)\n )\n summary.passed++;\n else summary.failed++;\n if (options.onResult)\n yield* Effect.tryPromise(async () =>\n options.onResult!(cell, result),\n );\n }\n }),\n ),\n { concurrency },\n );\n return summary;\n });\n}\n","export {\n AutExecutionError,\n FixtureError,\n ReportError,\n ScoringError,\n CheckpointExecutionError,\n} from './errors.js';\n\nimport { Effect, Exit, Scope } from 'effect';\nimport {\n recordError,\n resourceUri,\n authoringId,\n type AgentRuntimeName,\n type JsonObject,\n type ArtifactEntry,\n type AutContext,\n type AutEvent,\n type EvalDefinition,\n type ReportStore,\n type RunnerEvent,\n type RunResult,\n type RunStatus,\n type ResourceKind,\n type RunWriter,\n type RunMetadata,\n type ScoreResult,\n type TrialScoring,\n type Uuid,\n type TrajectoryEvent,\n} from '@evalkit/core';\nimport { snapshotCandidateWorkspace } from './snapshot.js';\nimport { createTrialWorkspace, type TrialWorkspace } from './workspace.js';\nimport { executeTranscript, type TranscriptProgress } from './transcript.js';\nimport { evaluateFinalScorers, scoreSummary } from './final-scoring.js';\nimport { AutExecutionError, FixtureError, ReportError } from './errors.js';\nimport { runBoundary } from './effect-boundary.js';\n\nexport { localReportStore } from './local-report-store.js';\nexport * from './local-report-reader.js';\nexport { runMatrix } from './matrix.js';\n\nexport type RunEvalOptions = {\n report: ReportStore;\n runId?: string;\n trialId?: string;\n suiteId?: string;\n /** Overrides the eval policy's requested number of independent trials. */\n trials?: number;\n /** Parameters made available to the AUT for this invocation. */\n parameters?: JsonObject;\n /** Matrix provenance retained with every aggregate and trial manifest. */\n matrix?: RunMetadata['matrix'];\n /** Selects a declared AUT runtime such as local, sandbox, or remote. */\n runtime?: AgentRuntimeName;\n /** Maximum number of trials from this aggregate run executing concurrently. */\n concurrency?: number;\n /** Optional shared limiter for coordinating trials across aggregate runs. */\n semaphore?: Effect.Semaphore;\n /** Base directory for persistent local trial workspaces. Omit for an ephemeral OS temp workspace. */\n workspaceRoot?: string;\n now?: () => Date;\n};\n\ntype InternalTrialOptions = RunEvalOptions & {\n runWriter?: RunWriter;\n trialIndex?: number;\n};\n\n/** Effect-native aggregate eval execution entry point. */\nexport function runEval(\n definition: EvalDefinition,\n options: RunEvalOptions,\n): Effect.Effect<RunResult, unknown> {\n return Effect.gen(function* () {\n yield* Effect.logInfo('eval run started').pipe(\n Effect.annotateLogs({\n evalId: authoringId(definition),\n ...(options.runId ? { runId: options.runId } : {}),\n ...(options.suiteId ? { suiteId: options.suiteId } : {}),\n }),\n );\n const result = yield* Effect.tryPromise({\n try: () => executeRun(definition, options),\n catch: (error) => error,\n });\n yield* Effect.logInfo('eval run finished').pipe(\n Effect.annotateLogs({\n evalId: authoringId(definition),\n runId: result.runId,\n status: result.status,\n }),\n );\n return result;\n });\n}\n\nfunction createId(_kind: 'run' | 'trial'): string {\n return crypto.randomUUID();\n}\n\nfunction canonicalId<K extends ResourceKind>(kind: K, id: string) {\n return resourceUri(kind, id as Uuid);\n}\n\nfunction assertUuid(value: string, label: string): void {\n if (\n !/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(\n value,\n )\n ) {\n throw new Error(`${label} must be a UUID`);\n }\n}\n\nfunction runMetadata(\n definition: EvalDefinition,\n options: RunEvalOptions,\n runId: string,\n startedAt: string,\n): RunMetadata {\n return {\n schemaVersion: 3,\n runId,\n runUri: canonicalId('run', runId),\n evalId: definition.id,\n ...(options.suiteId ? { suiteId: options.suiteId } : {}),\n ...(definition.agent.identity ? { aut: definition.agent.identity } : {}),\n parameters: options.parameters,\n matrix: options.matrix,\n startedAt,\n };\n}\n\n/** Recording a secondary error must never mask the original failure or block cleanup. */\nasync function tryEmitError(\n error: unknown,\n emitRunner: (event: RunnerEvent) => Promise<void>,\n now: () => Date,\n): Promise<void> {\n try {\n await emitRunner({\n kind: 'error',\n error: recordError(error),\n timestamp: now().toISOString(),\n });\n } catch {\n // A failed report writer cannot prevent cleanup or finalization.\n }\n}\n\n/** Executes one aggregate eval run and its requested isolated trials. */\nasync function executeRun(\n definition: EvalDefinition,\n options: RunEvalOptions,\n): Promise<RunResult> {\n let hasUser = false;\n for (const step of definition.transcript) {\n if (step.kind === 'user') hasUser = true;\n else if (step.kind !== 'agent' && !hasUser)\n throw new Error('Checkpoint requires a preceding user step');\n }\n if (definition.judge && definition.judge === definition.agent)\n throw new Error('Judge agent must be distinct from the agent under test');\n if (options.runId) assertUuid(options.runId, 'runId');\n if (options.trialId) assertUuid(options.trialId, 'trialId');\n const requestedTrials = options.trials ?? definition.policy?.trials ?? 1;\n if (!Number.isInteger(requestedTrials) || requestedTrials < 1) {\n throw new Error(\n `Trial count must be a positive integer; received ${requestedTrials}`,\n );\n }\n if (requestedTrials === 1) return runTrial(definition, options);\n\n const now = options.now ?? (() => new Date());\n const aggregateStartedAt = now();\n const runId = options.runId ?? createId('run');\n const runWriter = await options.report.startRun(\n runMetadata(definition, options, runId, aggregateStartedAt.toISOString()),\n );\n const trialEffects = Array.from(\n { length: requestedTrials },\n (_, trialIndex) => {\n const trial = Effect.tryPromise({\n try: () =>\n runTrial(definition, {\n ...options,\n runId,\n trialId: createId('trial'),\n trials: 1,\n runWriter,\n trialIndex,\n }),\n catch: (error) => error,\n });\n return options.semaphore\n ? options.semaphore.withPermits(1)(trial)\n : trial;\n },\n );\n const trials = await Effect.runPromise(\n Effect.all(trialEffects, {\n concurrency: options.concurrency ?? 32,\n }),\n );\n const failed = trials.filter(\n (trial) => trial.status !== 'completed' || !trial.scoring?.passed,\n ).length;\n const status = trials.some((trial) => trial.status === 'failed')\n ? 'failed'\n : 'completed';\n const endedAt = now();\n await runWriter.finalize({\n status,\n endedAt: endedAt.toISOString(),\n durationMs: endedAt.getTime() - aggregateStartedAt.getTime(),\n trialCount: trials.length,\n passed: trials.length - failed,\n failed,\n });\n const overallScores = trials\n .map((trial) => trial.scoring?.overall)\n .filter((score): score is number => score !== undefined);\n return {\n ...trials[0]!,\n runId,\n evalId: authoringId(definition),\n status,\n trialCount: trials.length,\n passed: trials.length - failed,\n failed,\n aggregateScoring: {\n passed: trials.length - failed,\n failed,\n passRate: (trials.length - failed) / trials.length,\n ...(overallScores.length\n ? {\n overall:\n overallScores.reduce((sum, score) => sum + score, 0) /\n overallScores.length,\n }\n : {}),\n },\n trials,\n };\n}\n\nasync function runTrial(\n definition: EvalDefinition,\n options: InternalTrialOptions,\n): Promise<RunResult> {\n const now = options.now ?? (() => new Date());\n const runId = options.runId ?? createId('run');\n const trialId = options.trialId ?? createId('trial');\n const startedAt = now().toISOString();\n const selectedRuntime = options.runtime;\n const runtime = selectedRuntime\n ? definition.agent.runtimes?.[selectedRuntime]\n : undefined;\n if (selectedRuntime && !runtime) {\n throw new Error(\n `AUT does not declare the requested ${selectedRuntime} runtime`,\n );\n }\n\n const randomSeed = crypto.getRandomValues(new Uint32Array(1))[0]!;\n const fixtureContext = {\n runId,\n evalId: authoringId(definition),\n trialId,\n trialIndex: options.trialIndex ?? 0,\n metadata: {\n ...(definition.metadata ?? {}),\n randomSeed,\n },\n ...(options.parameters ? { parameters: options.parameters } : {}),\n ...(selectedRuntime ? { runtime: selectedRuntime } : {}),\n } as const;\n const events: TrajectoryEvent[] = [];\n const runWriter =\n options.runWriter ??\n (await options.report.startRun(\n runMetadata(definition, options, runId, startedAt),\n ));\n const trialWriter = await runWriter.startTrial({\n schemaVersion: 3,\n runId,\n runUri: canonicalId('run', runId),\n trialId,\n trialUri: canonicalId('trial', trialId),\n trialIndex: options.trialIndex ?? 0,\n evalId: definition.id,\n ...(definition.agent.identity ? { aut: definition.agent.identity } : {}),\n parameters: options.parameters,\n matrix: options.matrix,\n startedAt,\n });\n\n let writeChain = Promise.resolve();\n let reportingFailed = false;\n const append = async (event: TrajectoryEvent): Promise<void> => {\n events.push(event);\n writeChain = writeChain.then(() => trialWriter.appendEvent(event));\n try {\n await writeChain;\n } catch (cause) {\n reportingFailed = true;\n throw new ReportError({\n cause,\n message: cause instanceof Error ? cause.message : String(cause),\n });\n }\n };\n const emitRunner = (event: RunnerEvent) =>\n append({ ...event, source: 'runner' });\n const onAutEvent = (event: AutEvent) => append({ ...event, source: 'aut' });\n\n let workspace: TrialWorkspace | undefined;\n let context: AutContext | undefined;\n let primaryError: unknown;\n let closeError: unknown;\n let scoring: TrialScoring | undefined;\n let artifacts: ArtifactEntry[] | undefined;\n let status: RunStatus = 'running';\n const progress: TranscriptProgress = { checkpoints: [], stoppedEarly: false };\n let cleanupError: unknown;\n const workspaceScope = await Effect.runPromise(Scope.make());\n\n try {\n await emitRunner({ kind: 'trial-started', timestamp: now().toISOString() });\n workspace = await runBoundary(\n Effect.acquireRelease(\n Effect.tryPromise({\n try: () =>\n createTrialWorkspace(\n fixtureContext,\n definition.fixtures,\n options.workspaceRoot,\n ),\n catch: (cause) =>\n new FixtureError({\n cause,\n message: cause instanceof Error ? cause.message : String(cause),\n }),\n }),\n (created) =>\n Effect.tryPromise({\n try: () => created.cleanup(),\n catch: (cause) =>\n new FixtureError({\n cause,\n message: cause instanceof Error ? cause.message : String(cause),\n }),\n }).pipe(\n Effect.catchAll((error) =>\n Effect.sync(() => {\n cleanupError = error;\n }).pipe(\n Effect.tap(() =>\n Effect.logError('trial workspace cleanup failed'),\n ),\n ),\n ),\n ),\n ).pipe(Effect.provideService(Scope.Scope, workspaceScope)),\n );\n const trialWorkspace = workspace;\n const trialContext: AutContext = {\n ...fixtureContext,\n workspace: trialWorkspace.artifacts.candidate,\n evaluatorWorkspace: trialWorkspace.artifacts.evaluator,\n };\n context = trialContext;\n // The Effect bracket closes the AUT even when a step or report append fails.\n await runBoundary(\n Effect.acquireUseRelease(\n Effect.tryPromise({\n try: () =>\n definition.agent.start({\n context: trialContext,\n ...(runtime ? { runtime } : {}),\n onEvent: onAutEvent,\n }),\n catch: (cause) =>\n new AutExecutionError({\n cause,\n message: cause instanceof Error ? cause.message : String(cause),\n }),\n }),\n (session) =>\n Effect.tryPromise({\n try: () =>\n executeTranscript(definition, session, {\n context: trialContext,\n artifacts: trialWorkspace.artifacts,\n events,\n now,\n randomSeed,\n emitRunner,\n progress,\n }),\n catch: (cause) => cause,\n }),\n (opened) =>\n Effect.tryPromise({\n try: () => opened.close(),\n catch: (cause) =>\n new AutExecutionError({\n cause,\n message: cause instanceof Error ? cause.message : String(cause),\n }),\n }).pipe(\n Effect.catchAll((error) =>\n Effect.sync(() => {\n closeError = error;\n }).pipe(\n Effect.tap(() => Effect.logError('AUT session close failed')),\n ),\n ),\n ),\n ).pipe(Effect.annotateLogs({ runId, trialId, evalId: definition.id })),\n );\n } catch (error) {\n primaryError = error;\n await tryEmitError(error, emitRunner, now);\n }\n\n if (closeError) {\n if (!primaryError) primaryError = closeError;\n await tryEmitError(closeError, emitRunner, now);\n }\n\n const { checkpoints, stoppedEarly, lastTurn } = progress;\n const scoreResults: ScoreResult[] = [];\n const skippedScorers: string[] = [];\n try {\n await evaluateFinalScorers(definition, {\n context,\n workspace,\n events,\n lastTurn,\n primaryError,\n stoppedEarly,\n reportingFailed,\n results: scoreResults,\n skippedScorers,\n now,\n emitRunner,\n });\n\n scoring = scoreSummary(scoreResults, checkpoints, skippedScorers);\n await trialWriter.writeScores(scoring);\n\n if (workspace) {\n try {\n artifacts = await snapshotCandidateWorkspace(\n workspace.artifacts.candidate.root,\n trialWriter,\n );\n } catch (captureError) {\n if (!primaryError) primaryError = captureError;\n await tryEmitError(captureError, emitRunner, now);\n }\n }\n } catch (error) {\n if (!primaryError) primaryError = error;\n await tryEmitError(error, emitRunner, now);\n } finally {\n await Effect.runPromise(\n Scope.close(workspaceScope, Exit.succeed(undefined)),\n );\n if (cleanupError) {\n if (!primaryError) primaryError = cleanupError;\n await tryEmitError(cleanupError, emitRunner, now);\n }\n }\n\n scoring ??= scoreSummary(scoreResults, checkpoints, skippedScorers);\n if (!primaryError) {\n try {\n await emitRunner({\n kind: 'trial-completed',\n timestamp: now().toISOString(),\n });\n } catch (error) {\n primaryError = error;\n }\n }\n status = primaryError ? 'failed' : 'completed';\n\n const error = primaryError ? recordError(primaryError) : undefined;\n const endedAt = now().toISOString();\n await trialWriter.finalize({\n status,\n endedAt,\n durationMs: new Date(endedAt).getTime() - new Date(startedAt).getTime(),\n scoring,\n ...(artifacts ? { artifacts } : {}),\n ...(error ? { error } : {}),\n });\n if (!options.runWriter) {\n await runWriter.finalize({\n status,\n endedAt,\n trialCount: 1,\n passed: status === 'completed' && scoring.passed ? 1 : 0,\n failed: status === 'failed' || !scoring.passed ? 1 : 0,\n ...(error ? { error } : {}),\n });\n }\n\n return {\n runId,\n runUri: canonicalId('run', runId),\n trialId,\n trialUri: canonicalId('trial', trialId),\n trialIndex: options.trialIndex ?? 0,\n evalId: definition.id,\n status,\n reportLocation: runWriter.location,\n durationMs: new Date(endedAt).getTime() - new Date(startedAt).getTime(),\n scoring,\n ...(error ? { error } : {}),\n };\n}\n"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@leostera/evalkit",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Author and run agent evals as code",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/leostera/evalkit.git"
|
|
10
|
+
},
|
|
11
|
+
"packageManager": "bun@1.4.2",
|
|
12
|
+
"workspaces": [
|
|
13
|
+
"packages/*",
|
|
14
|
+
"examples/*",
|
|
15
|
+
"www"
|
|
16
|
+
],
|
|
17
|
+
"publishConfig": {
|
|
18
|
+
"access": "public",
|
|
19
|
+
"registry": "https://registry.npmjs.org"
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
"dist",
|
|
23
|
+
"README.md",
|
|
24
|
+
"LICENSE"
|
|
25
|
+
],
|
|
26
|
+
"exports": {
|
|
27
|
+
".": {
|
|
28
|
+
"types": "./dist/index.d.mts",
|
|
29
|
+
"import": "./dist/index.mjs"
|
|
30
|
+
},
|
|
31
|
+
"./runner": {
|
|
32
|
+
"types": "./dist/runner.d.mts",
|
|
33
|
+
"import": "./dist/runner.mjs"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"bin": {
|
|
37
|
+
"evalkit": "dist/cli.mjs"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"effect": "^3.22.2",
|
|
41
|
+
"hono": "^4.11.6"
|
|
42
|
+
},
|
|
43
|
+
"scripts": {
|
|
44
|
+
"build": "bun run --filter './packages/*' build && bun scripts/sync-package.ts",
|
|
45
|
+
"check": "bun run --filter './packages/*' check && bun run --filter './examples/*' check",
|
|
46
|
+
"test": "bun test",
|
|
47
|
+
"pack:check": "bun packages/evalkit/scripts/pack-check.ts",
|
|
48
|
+
"format": "prettier --write .",
|
|
49
|
+
"format:check": "prettier --check .",
|
|
50
|
+
"clean": "rm -rf packages/*/dist dist"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@types/bun": "latest",
|
|
54
|
+
"prettier": "latest",
|
|
55
|
+
"typescript": "latest"
|
|
56
|
+
}
|
|
57
|
+
}
|