@benchsdk/client 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/client.ts","../src/reporter.ts","../src/metrics.ts","../src/participants.ts"],"sourcesContent":["export {\n BenchmarkApiError,\n createBenchmarkClient,\n} from './client';\nexport { BenchmarkReporter, claimBenchmarkReporter } from './reporter';\nexport { createSystemMetricsCollector } from './metrics';\nexport type {\n BenchmarkAssignment,\n BenchmarkArtifact,\n BenchmarkClient,\n BenchmarkClientConfig,\n BenchmarkConcurrencyPoint,\n BenchmarkAnalyticsReadiness,\n BenchmarkEventRateBucket,\n BenchmarkFailurePoint,\n BenchmarkParticipant,\n BenchmarkResource,\n BenchmarkResultLatencySummary,\n BenchmarkResultsOverview,\n BenchmarkResultsOverviewAnalytics,\n BenchmarkResultsOverviewInput,\n BenchmarkResultsOverviewRun,\n BenchmarkResultSummary,\n BenchmarkRun,\n BenchmarkRunImports,\n BenchmarkRunAnalyticsSummary,\n BenchmarkRunImportsSummary,\n BenchmarkRunImportItem,\n BenchmarkRunResults,\n BenchmarkRunStatus,\n BenchmarkRunSummaryInput,\n BenchmarkRunSummaryMetric,\n BenchmarkRunSummaryResult,\n BenchmarkRunSummaryRunMetadata,\n BenchmarkRunSummaryScalar,\n BenchmarkRunTaskResults,\n BenchmarkRunTaskResultsInput,\n BenchmarkRunTimeline,\n BenchmarkRunTimelineInput,\n BenchmarkRunWorker,\n BenchmarkStepResultSummary,\n BenchmarkTaskBucket,\n BenchmarkWorkerAttempt,\n BenchmarkWorkerStatus,\n ClaimWorkerInput,\n CreateWorkerArtifactInput,\n CreateWorkerArtifactResponse,\n CreateRunInput,\n DefineStepOptions,\n JsonObject,\n JsonValue,\n PlanWorkersInput,\n RunProgress,\n RunProgressConcurrency,\n RunProgressParticipant,\n RunProgressParticipantCounts,\n RunProgressStatus,\n RunProgressSummary,\n RunProgressTaskCounts,\n RunProgressWorkerCounts,\n RunWorkerContext,\n RunWorkerOptions,\n RunWorkerResult,\n SendTaskResultsInput,\n TaskStepRecord,\n TaskResultRecord,\n TaskResultsResponse,\n TaskFunction,\n UpdateBenchmarkInput,\n UpdateParticipantInput,\n UpdateRunInput,\n UpdateWorkerInput,\n WorkerConcurrencySample,\n WorkerFinishContext,\n WorkerHeartbeatInput,\n UpsertBenchmarkInput,\n UpsertParticipantInput,\n UploadWorkerArtifactInput,\n} from './types';\n\nexport {\n filterParticipantsByEnv,\n selectParticipants,\n} from './participants';\n\nexport type {\n BaseParticipant,\n} from './participants';\nexport type {\n BenchmarkReporterArtifactInput,\n BenchmarkReporterBarrierInput,\n BenchmarkReporterBarrierResult,\n BenchmarkReporterConfig,\n BenchmarkReporterHeartbeatInput,\n BenchmarkReporterProgress,\n} from './reporter';\nexport type {\n BenchmarkSystemMetricsCollector,\n BenchmarkSystemMetricsSample,\n} from './metrics';\n","import type {\n BenchmarkAssignment,\n BenchmarkArtifact,\n BenchmarkClient,\n BenchmarkClientConfig,\n BenchmarkParticipant,\n BenchmarkResource,\n BenchmarkRun,\n BenchmarkResultsOverview,\n BenchmarkResultsOverviewInput,\n BenchmarkRunImports,\n BenchmarkRunResults,\n BenchmarkRunSummaryInput,\n BenchmarkRunTaskResults,\n BenchmarkRunTaskResultsInput,\n BenchmarkRunTimeline,\n BenchmarkRunTimelineInput,\n BenchmarkRunWorker,\n BenchmarkWorkerAttempt,\n CreateWorkerArtifactInput,\n CreateWorkerArtifactResponse,\n ClaimWorkerInput,\n CreateRunInput,\n DefineStepOptions,\n JsonObject,\n RunWorkerOptions,\n RunWorkerResult,\n SendTaskResultsInput,\n PlanWorkersInput,\n TaskStepRecord,\n TaskResultRecord,\n TaskResultsResponse,\n RunProgress,\n UpdateBenchmarkInput,\n UpdateParticipantInput,\n UpdateRunInput,\n UpdateWorkerInput,\n UpsertBenchmarkInput,\n UpsertParticipantInput,\n UploadWorkerArtifactInput,\n WorkerConcurrencySample,\n WorkerHeartbeatInput,\n} from './types';\n\nconst DEFAULT_BASE_URL = 'https://platform.computesdk.com/api/v1';\nconst DEFAULT_BATCH_SIZE = 1000;\nconst DEFAULT_HEARTBEAT_INTERVAL_MS = 30_000;\nconst DEFAULT_FLUSH_INTERVAL_MS = 30_000;\nconst DEFAULT_READY_POLL_INTERVAL_MS = 1000;\nconst MAX_TASK_RESULT_RECORDS = 5000;\nconst MAX_TASK_RECORD_STEPS = 100;\nconst MAX_HEARTBEAT_CONCURRENCY_SAMPLES = 20;\nconst MAX_WORKER_LOG_LINES = 100_000;\n\nexport class BenchmarkApiError extends Error {\n constructor(\n message: string,\n public readonly status: number,\n public readonly body: string,\n ) {\n super(message);\n this.name = 'BenchmarkApiError';\n }\n}\n\nfunction trimTrailingSlash(value: string): string {\n return value.replace(/\\/+$/, '');\n}\n\nfunction encodePath(value: string): string {\n return encodeURIComponent(value);\n}\n\nfunction queryString(input: Record<string, number | undefined>): string {\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(input)) {\n if (value !== undefined) params.set(key, String(value));\n }\n const value = params.toString();\n return value ? `?${value}` : '';\n}\n\nfunction getApiKey(input?: string): string | undefined {\n return input ?? (typeof process !== 'undefined' ? process.env.COMPUTESDK_ADMIN_API_KEY ?? process.env.COMPUTESDK_API_KEY : undefined);\n}\n\nfunction getErrorCode(error: unknown): string {\n if (error instanceof Error && 'code' in error && typeof (error as { code: unknown }).code === 'string' && (error as { code: string }).code) {\n return (error as { code: string }).code;\n }\n if (error instanceof Error && error.name) return error.name;\n return 'ERROR';\n}\n\nfunction toJsonObject(value: unknown): JsonObject | undefined {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return undefined;\n return value as JsonObject;\n}\n\n/** Merges task-level measurements with a returned data payload; undefined when empty. */\nfunction mergeMeasures(measures: JsonObject, returned: JsonObject | undefined): JsonObject | undefined {\n const merged = { ...measures, ...(returned ?? {}) };\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n\n/** Synthesizes the single step that represents a task that declared no steps. */\nfunction implicitTaskStep(record: TaskResultRecord, measures: JsonObject): TaskStepRecord {\n return {\n name: 'task',\n status: record.status === 'success' ? 'success' : 'error',\n startedAt: record.startedAt,\n completedAt: record.completedAt,\n latencyMs: record.latencyMs,\n errorCode: record.errorCode ?? null,\n data: Object.keys(measures).length > 0 ? { ...measures } : undefined,\n };\n}\n\nfunction validateTaskResults(input: SendTaskResultsInput): void {\n if (input.records.length > MAX_TASK_RESULT_RECORDS) {\n throw new Error(`Benchmark task result batches are limited to ${MAX_TASK_RESULT_RECORDS} records.`);\n }\n\n for (const record of input.records) {\n if ((record.steps?.length ?? 0) > MAX_TASK_RECORD_STEPS) {\n throw new Error(`Benchmark task result records are limited to ${MAX_TASK_RECORD_STEPS} steps.`);\n }\n }\n}\n\nfunction validateHeartbeat(input: WorkerHeartbeatInput): void {\n const concurrency = input.concurrency ?? [];\n if (concurrency.length > MAX_HEARTBEAT_CONCURRENCY_SAMPLES) {\n throw new Error(`Benchmark heartbeat concurrency is limited to ${MAX_HEARTBEAT_CONCURRENCY_SAMPLES} samples.`);\n }\n\n const steps = new Set<string>();\n for (const sample of concurrency) {\n if (steps.has(sample.step)) {\n throw new Error(`Benchmark heartbeat concurrency step values must be unique per heartbeat.`);\n }\n steps.add(sample.step);\n }\n}\n\nfunction validatePositiveInteger(name: string, value: number): void {\n if (!Number.isInteger(value) || value <= 0) {\n throw new Error(`Benchmark ${name} must be a positive integer.`);\n }\n}\n\nfunction validateBatchSize(value: number): void {\n validatePositiveInteger('batchSize', value);\n if (value > MAX_TASK_RESULT_RECORDS) {\n throw new Error(`Benchmark batchSize must be at most ${MAX_TASK_RESULT_RECORDS}.`);\n }\n}\n\nfunction normalizeArtifacts(data: { items?: BenchmarkArtifact[]; artifacts?: BenchmarkArtifact[] }): BenchmarkArtifact[] {\n return data.items ?? data.artifacts ?? [];\n}\n\nfunction bodySizeBytes(body: UploadWorkerArtifactInput['body']): number | undefined {\n if (typeof body === 'string') return new TextEncoder().encode(body).byteLength;\n if (body instanceof Blob) return body.size;\n if (body instanceof ArrayBuffer) return body.byteLength;\n if (ArrayBuffer.isView(body)) return body.byteLength;\n if (body instanceof URLSearchParams) return new TextEncoder().encode(body.toString()).byteLength;\n return undefined;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nasync function mapPool<T>(items: T[], concurrency: number, fn: (item: T) => Promise<void>): Promise<void> {\n let nextIndex = 0;\n const workers = Array.from({ length: Math.min(concurrency, items.length) }, async () => {\n while (nextIndex < items.length) {\n const item = items[nextIndex];\n nextIndex += 1;\n await fn(item);\n }\n });\n await Promise.all(workers);\n}\n\nexport function createBenchmarkClient(config: BenchmarkClientConfig = {}): BenchmarkClient {\n const baseUrl = trimTrailingSlash(config.baseUrl ?? DEFAULT_BASE_URL);\n const apiKey = getApiKey(config.apiKey);\n const fetchImpl = config.fetch ?? (typeof fetch !== 'undefined' ? fetch : undefined);\n\n if (!fetchImpl) {\n throw new Error('fetch is not available');\n }\n const doFetch = fetchImpl;\n\n async function request<T>(method: string, path: string, body?: JsonObject): Promise<T> {\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (apiKey) headers.Authorization = `Bearer ${apiKey}`;\n\n const response = await doFetch(`${baseUrl}${path}`, {\n method,\n headers,\n body: body === undefined ? undefined : JSON.stringify(body),\n });\n const text = await response.text();\n\n if (!response.ok) {\n throw new BenchmarkApiError(\n `Benchmark API request failed: ${response.status} ${response.statusText}`,\n response.status,\n text,\n );\n }\n\n return (text ? JSON.parse(text) : {}) as T;\n }\n\n async function sendTaskResults(input: SendTaskResultsInput): Promise<TaskResultsResponse> {\n if (input.records.length === 0) {\n return {};\n }\n validateTaskResults(input);\n\n return request<TaskResultsResponse>(\n 'POST',\n `/benchmarks/${encodePath(input.benchmarkSlug)}/runs/${encodePath(input.runId)}/workers/${encodePath(input.workerId)}/events`,\n {\n type: 'task_results',\n attemptId: input.attemptId,\n sequenceNumber: input.sequenceNumber,\n isFinal: input.isFinal,\n records: input.records as unknown as JsonObject[],\n },\n );\n }\n\n async function updateWorkerLifecycle(\n action: 'heartbeat' | 'complete' | 'fail' | 'release',\n benchmarkSlug: string,\n runId: string,\n workerId: string,\n attemptId: string,\n extra?: JsonObject,\n ): Promise<{ worker: BenchmarkRunWorker; attempt: BenchmarkWorkerAttempt }> {\n return request<{ worker: BenchmarkRunWorker; attempt: BenchmarkWorkerAttempt }>(\n 'POST',\n `/benchmarks/${encodePath(benchmarkSlug)}/runs/${encodePath(runId)}/workers/${encodePath(workerId)}/${action}`,\n { attemptId, ...(extra ?? {}) },\n );\n }\n\n const client: BenchmarkClient = {\n async upsertBenchmark(slug, input) {\n const data = await request<{ benchmark: BenchmarkResource }>('PUT', `/benchmarks/${encodePath(slug)}`, input as unknown as JsonObject);\n return data.benchmark;\n },\n\n async getBenchmark(slug) {\n const data = await request<{ benchmark: BenchmarkResource }>('GET', `/benchmarks/${encodePath(slug)}`);\n return data.benchmark;\n },\n\n async updateBenchmark(slug, input: UpdateBenchmarkInput) {\n const data = await request<{ benchmark: BenchmarkResource }>('PATCH', `/benchmarks/${encodePath(slug)}`, input as unknown as JsonObject);\n return data.benchmark;\n },\n\n async listBenchmarks() {\n const data = await request<{ items?: BenchmarkResource[]; benchmarks?: BenchmarkResource[] }>('GET', '/benchmarks');\n return data.items ?? data.benchmarks ?? [];\n },\n\n async createRun(benchmarkSlug, input) {\n return request<{ run: BenchmarkRun; participants: BenchmarkParticipant[]; organizationSlug: string }>(\n 'POST',\n `/benchmarks/${encodePath(benchmarkSlug)}/runs`,\n input as unknown as JsonObject,\n );\n },\n\n async listRuns(benchmarkSlug) {\n const data = await request<{ items: BenchmarkRun[] }>('GET', `/benchmarks/${encodePath(benchmarkSlug)}/runs`);\n return data.items;\n },\n\n async getRun(benchmarkSlug, runId) {\n const data = await request<{ run: BenchmarkRun }>('GET', `/benchmarks/${encodePath(benchmarkSlug)}/runs/${encodePath(runId)}`);\n return data.run;\n },\n\n async updateRun(benchmarkSlug, runId, input: UpdateRunInput) {\n const data = await request<{ run: BenchmarkRun }>(\n 'PATCH',\n `/benchmarks/${encodePath(benchmarkSlug)}/runs/${encodePath(runId)}`,\n input as unknown as JsonObject,\n );\n return data.run;\n },\n\n async upsertParticipant(benchmarkSlug, runId, participantSlug, input = {}) {\n const data = await request<{ participant: BenchmarkParticipant }>(\n 'PUT',\n `/benchmarks/${encodePath(benchmarkSlug)}/runs/${encodePath(runId)}/participants/${encodePath(participantSlug)}`,\n input as JsonObject,\n );\n return data.participant;\n },\n\n async listParticipants(benchmarkSlug, runId) {\n const data = await request<{ items?: BenchmarkParticipant[]; participants?: BenchmarkParticipant[] }>(\n 'GET',\n `/benchmarks/${encodePath(benchmarkSlug)}/runs/${encodePath(runId)}/participants`,\n );\n return data.items ?? data.participants ?? [];\n },\n\n async getParticipant(benchmarkSlug, runId, participantSlug) {\n const data = await request<{ participant: BenchmarkParticipant }>(\n 'GET',\n `/benchmarks/${encodePath(benchmarkSlug)}/runs/${encodePath(runId)}/participants/${encodePath(participantSlug)}`,\n );\n return data.participant;\n },\n\n async updateParticipant(benchmarkSlug, runId, participantSlug, input: UpdateParticipantInput) {\n const data = await request<{ participant: BenchmarkParticipant }>(\n 'PATCH',\n `/benchmarks/${encodePath(benchmarkSlug)}/runs/${encodePath(runId)}/participants/${encodePath(participantSlug)}`,\n input as unknown as JsonObject,\n );\n return data.participant;\n },\n\n async getRunProgress(benchmarkSlug, runId) {\n return request<RunProgress>(\n 'GET',\n `/benchmarks/${encodePath(benchmarkSlug)}/runs/${encodePath(runId)}/progress`,\n );\n },\n\n async listWorkers(benchmarkSlug, runId, participantSlug) {\n const data = await request<{ items?: BenchmarkRunWorker[]; workers?: BenchmarkRunWorker[] }>(\n 'GET',\n `/benchmarks/${encodePath(benchmarkSlug)}/runs/${encodePath(runId)}/participants/${encodePath(participantSlug)}/workers`,\n );\n return data.items ?? data.workers ?? [];\n },\n\n async planWorkers(benchmarkSlug, runId, participantSlug, input: PlanWorkersInput = {}) {\n const data = await request<{ items?: BenchmarkRunWorker[]; workers?: BenchmarkRunWorker[] }>(\n 'POST',\n `/benchmarks/${encodePath(benchmarkSlug)}/runs/${encodePath(runId)}/participants/${encodePath(participantSlug)}/workers`,\n input as JsonObject,\n );\n return data.items ?? data.workers ?? [];\n },\n\n async getWorker(benchmarkSlug, runId, workerId) {\n const data = await request<{ worker: BenchmarkRunWorker }>(\n 'GET',\n `/benchmarks/${encodePath(benchmarkSlug)}/runs/${encodePath(runId)}/workers/${encodePath(workerId)}`,\n );\n return data.worker;\n },\n\n async updateWorker(benchmarkSlug, runId, workerId, input: UpdateWorkerInput) {\n const data = await request<{ worker: BenchmarkRunWorker }>(\n 'PATCH',\n `/benchmarks/${encodePath(benchmarkSlug)}/runs/${encodePath(runId)}/workers/${encodePath(workerId)}`,\n input as unknown as JsonObject,\n );\n return data.worker;\n },\n\n async claimWorker(benchmarkSlug, runId, participantSlug, input: ClaimWorkerInput = {}) {\n const data = await request<{ assignment: BenchmarkAssignment | null }>(\n 'POST',\n `/benchmarks/${encodePath(benchmarkSlug)}/runs/${encodePath(runId)}/participants/${encodePath(participantSlug)}/workers/claim`,\n input as JsonObject,\n );\n return data.assignment;\n },\n\n sendTaskResults,\n\n async heartbeatWorker(benchmarkSlug, runId, workerId, input: WorkerHeartbeatInput) {\n validateHeartbeat(input);\n const { attemptId, ...extra } = input;\n if (extra.currentStep == null) {\n delete extra.currentStep;\n }\n return updateWorkerLifecycle('heartbeat', benchmarkSlug, runId, workerId, attemptId, extra as JsonObject);\n },\n\n releaseWorker(benchmarkSlug, runId, workerId, attemptId) {\n return updateWorkerLifecycle('release', benchmarkSlug, runId, workerId, attemptId);\n },\n\n completeWorker(benchmarkSlug, runId, workerId, attemptId) {\n return updateWorkerLifecycle('complete', benchmarkSlug, runId, workerId, attemptId);\n },\n\n failWorker(benchmarkSlug, runId, workerId, attemptId, error) {\n return updateWorkerLifecycle('fail', benchmarkSlug, runId, workerId, attemptId, {\n errorCode: getErrorCode(error),\n errorMessage: error instanceof Error ? error.message : String(error ?? 'Unknown error'),\n });\n },\n\n async createWorkerArtifact(benchmarkSlug, runId, workerId, input: CreateWorkerArtifactInput) {\n return request<CreateWorkerArtifactResponse>(\n 'POST',\n `/benchmarks/${encodePath(benchmarkSlug)}/runs/${encodePath(runId)}/workers/${encodePath(workerId)}/artifacts`,\n input as unknown as JsonObject,\n );\n },\n\n async uploadWorkerArtifact(benchmarkSlug, runId, workerId, input: UploadWorkerArtifactInput) {\n const sizeBytes = bodySizeBytes(input.body);\n const artifactInput: CreateWorkerArtifactInput = {\n attemptId: input.attemptId,\n kind: input.kind,\n contentType: input.contentType,\n name: input.name,\n metadata: sizeBytes === undefined ? input.metadata : { ...input.metadata, sizeBytes },\n };\n const response = await client.createWorkerArtifact(benchmarkSlug, runId, workerId, artifactInput);\n const uploadUrl = response.uploadUrl ?? response.artifact?.uploadUrl;\n if (!uploadUrl) {\n throw new Error('Benchmark artifact upload URL is missing.');\n }\n const uploadResponse = await doFetch(uploadUrl, {\n method: 'PUT',\n headers: input.contentType ? { 'Content-Type': input.contentType } : undefined,\n body: input.body,\n });\n if (!uploadResponse.ok) {\n const errorBody = await uploadResponse.text().catch(() => '');\n throw new BenchmarkApiError(\n `Benchmark artifact upload failed with ${uploadResponse.status}`,\n uploadResponse.status,\n errorBody,\n );\n }\n return response;\n },\n\n async listRunArtifacts(benchmarkSlug, runId) {\n const data = await request<{ items?: BenchmarkArtifact[]; artifacts?: BenchmarkArtifact[] }>(\n 'GET',\n `/benchmarks/${encodePath(benchmarkSlug)}/runs/${encodePath(runId)}/artifacts`,\n );\n return normalizeArtifacts(data);\n },\n\n async listWorkerArtifacts(benchmarkSlug, runId, workerId) {\n const data = await request<{ items?: BenchmarkArtifact[]; artifacts?: BenchmarkArtifact[] }>(\n 'GET',\n `/benchmarks/${encodePath(benchmarkSlug)}/runs/${encodePath(runId)}/workers/${encodePath(workerId)}/artifacts`,\n );\n return normalizeArtifacts(data);\n },\n\n async getBenchmarkResults(benchmarkSlug, input: BenchmarkResultsOverviewInput = {}) {\n return request<BenchmarkResultsOverview>(\n 'GET',\n `/benchmarks/${encodePath(benchmarkSlug)}/results${queryString({ limit: input.limit })}`,\n );\n },\n\n async getRunResults(benchmarkSlug, runId) {\n return request<BenchmarkRunResults>(\n 'GET',\n `/benchmarks/${encodePath(benchmarkSlug)}/runs/${encodePath(runId)}/results`,\n );\n },\n\n async getRunTaskResults(benchmarkSlug, runId, input: BenchmarkRunTaskResultsInput = {}) {\n return request<BenchmarkRunTaskResults>(\n 'GET',\n `/benchmarks/${encodePath(benchmarkSlug)}/runs/${encodePath(runId)}/results/tasks${queryString({ bucketSize: input.bucketSize, failureLimit: input.failureLimit })}`,\n );\n },\n\n async getRunTimeline(benchmarkSlug, runId, input: BenchmarkRunTimelineInput = {}) {\n return request<BenchmarkRunTimeline>(\n 'GET',\n `/benchmarks/${encodePath(benchmarkSlug)}/runs/${encodePath(runId)}/results/timeline${queryString({ bucketMs: input.bucketMs })}`,\n );\n },\n\n async getRunImports(benchmarkSlug, runId) {\n return request<BenchmarkRunImports>(\n 'GET',\n `/benchmarks/${encodePath(benchmarkSlug)}/runs/${encodePath(runId)}/results/imports`,\n );\n },\n\n async submitRunSummary(benchmarkSlug, runId, input) {\n await request(\n 'POST',\n `/benchmarks/${encodePath(benchmarkSlug)}/runs/${encodePath(runId)}/summary`,\n input as unknown as JsonObject,\n );\n },\n\n async runWorker(options: RunWorkerOptions): Promise<RunWorkerResult> {\n if (options.concurrency !== undefined) validatePositiveInteger('concurrency', options.concurrency);\n if (options.batchSize !== undefined) validateBatchSize(options.batchSize);\n if (options.flushIntervalMs !== undefined) validatePositiveInteger('flushIntervalMs', options.flushIntervalMs);\n\n const assignment = await client.claimWorker(options.benchmarkSlug, options.runId, options.participantSlug, {\n processKind: options.processKind,\n processKey: options.processKey,\n });\n if (!assignment) return { assignment: null, records: [] };\n const claimed = assignment;\n\n let sequenceNumber = 0;\n const records: TaskResultRecord[] = [];\n const pending: TaskResultRecord[] = [];\n const batchSize = options.batchSize ?? DEFAULT_BATCH_SIZE;\n const workerConcurrency = options.concurrency ?? claimed.targetConcurrency;\n validatePositiveInteger('concurrency', workerConcurrency);\n const taskIndices = Array.from({ length: claimed.taskRange.count }, (_, index) => claimed.taskRange.start + index);\n const activeByStep = new Map<string, number>();\n const targetByStep = new Map<string, number>();\n const readyWaitByStep = new Map<string, Promise<void>>();\n let doneCount = 0;\n let errorCount = 0;\n let inFlightCount = 0;\n let flushChain = Promise.resolve();\n\n function concurrencySamples(): WorkerConcurrencySample[] {\n return Array.from(activeByStep.entries())\n .filter(([, active]) => active > 0)\n .map(([step, active]) => ({\n step,\n active,\n target: targetByStep.get(step) ?? workerConcurrency,\n }))\n .sort((a, b) => b.active - a.active)\n .slice(0, MAX_HEARTBEAT_CONCURRENCY_SAMPLES);\n }\n\n async function sendHeartbeat(): Promise<void> {\n const concurrency = concurrencySamples();\n const step = concurrency[0]?.step ?? null;\n await client.heartbeatWorker(options.benchmarkSlug, options.runId, claimed.workerId, {\n attemptId: claimed.attemptId,\n progressDone: doneCount,\n progressInFlight: inFlightCount,\n progressErrors: errorCount,\n progressTotal: taskIndices.length,\n ...(step ? { currentStep: step } : {}),\n concurrency,\n });\n }\n\n let heartbeatInFlight: Promise<void> | null = null;\n let heartbeatRequested = false;\n\n function requestHeartbeat(): void {\n heartbeatRequested = true;\n if (heartbeatInFlight) return;\n\n heartbeatInFlight = (async () => {\n while (heartbeatRequested) {\n heartbeatRequested = false;\n await sendHeartbeat().catch(() => {});\n }\n })().finally(() => {\n heartbeatInFlight = null;\n if (heartbeatRequested) requestHeartbeat();\n });\n }\n\n async function pollStepReady(stepName: string, stepOptions: DefineStepOptions): Promise<void> {\n const startedAt = Date.now();\n const pollInterval = stepOptions.readyPollIntervalMs ?? options.readyPollIntervalMs ?? DEFAULT_READY_POLL_INTERVAL_MS;\n\n while (true) {\n const progress = await client.getRunProgress(options.benchmarkSlug, options.runId);\n const participant = progress.participants.find((item) => item.slug === options.participantSlug);\n const step = participant?.concurrency.find((item) => item.step === stepName);\n if (step?.ready) return;\n\n if (typeof stepOptions.readyTimeoutMs === 'number' && Date.now() - startedAt >= stepOptions.readyTimeoutMs) {\n throw new Error(`Timed out waiting for benchmark step \"${stepName}\" to become ready.`);\n }\n\n await sleep(pollInterval);\n }\n }\n\n async function waitForStepReady(stepName: string, stepOptions: DefineStepOptions): Promise<void> {\n const existing = readyWaitByStep.get(stepName);\n if (existing) return existing;\n\n const wait = pollStepReady(stepName, stepOptions).finally(() => {\n if (readyWaitByStep.get(stepName) === wait) readyWaitByStep.delete(stepName);\n });\n readyWaitByStep.set(stepName, wait);\n return wait;\n }\n\n const heartbeat = setInterval(() => {\n requestHeartbeat();\n }, options.heartbeatIntervalMs ?? DEFAULT_HEARTBEAT_INTERVAL_MS);\n heartbeat.unref?.();\n\n async function flush(isFinal: boolean, force = false): Promise<void> {\n flushChain = flushChain.then(async () => {\n if (force && doneCount >= taskIndices.length) return;\n while (pending.length >= batchSize || ((isFinal || force) && pending.length > 0)) {\n const batch = pending.splice(0, batchSize);\n await sendTaskResults({\n benchmarkSlug: options.benchmarkSlug,\n runId: options.runId,\n workerId: claimed.workerId,\n attemptId: claimed.attemptId,\n sequenceNumber,\n isFinal: isFinal && pending.length === 0,\n records: batch,\n });\n sequenceNumber += 1;\n }\n });\n await flushChain;\n }\n\n const resultFlush = setInterval(() => {\n if (doneCount < taskIndices.length) void flush(false, true).catch(() => {});\n }, options.flushIntervalMs ?? DEFAULT_FLUSH_INTERVAL_MS);\n resultFlush.unref?.();\n\n // Accumulated across the worker's tasks via `ctx.step` and `ctx.log`,\n // uploaded once as a worker log artifact when the worker finishes.\n const workerLogLines: string[] = [];\n let workerLogTruncated = false;\n function appendWorkerLog(line: string): void {\n if (workerLogLines.length >= MAX_WORKER_LOG_LINES) {\n if (!workerLogTruncated) {\n workerLogTruncated = true;\n workerLogLines.push('... (worker log truncated)');\n }\n return;\n }\n workerLogLines.push(line);\n }\n\n async function runFinishHook(status: 'success' | 'error'): Promise<void> {\n await options.onFinish?.({\n assignment: claimed,\n records,\n status,\n client,\n uploadArtifact(input) {\n return client.uploadWorkerArtifact(options.benchmarkSlug, options.runId, claimed.workerId, {\n ...input,\n attemptId: claimed.attemptId,\n });\n },\n });\n }\n\n async function uploadWorkerLogArtifact(): Promise<void> {\n if (workerLogLines.length === 0) return;\n try {\n await client.uploadWorkerArtifact(options.benchmarkSlug, options.runId, claimed.workerId, {\n attemptId: claimed.attemptId,\n kind: 'coordinator.log',\n contentType: 'text/plain',\n name: 'worker.log',\n body: workerLogLines.join('\\n') + '\\n',\n });\n } catch {\n // Log upload is best-effort; never fail the run over it.\n }\n }\n\n try {\n await sendHeartbeat().catch(() => {});\n\n await mapPool(taskIndices, workerConcurrency, async (taskIndex) => {\n inFlightCount += 1;\n const startedAtDate = new Date();\n const startedAtMs = Date.now();\n const record: TaskResultRecord = {\n taskIndex,\n status: 'success',\n startedAt: startedAtDate.toISOString(),\n };\n const steps: TaskStepRecord[] = [];\n const taskMeasures: JsonObject = {};\n // The step a `measure(...)` call currently attributes to. Set while a\n // step's fn runs; null at task top-level (measures go on the record).\n let activeStep: TaskStepRecord | null = null;\n\n function measure(data: JsonObject): void {\n if (activeStep) {\n activeStep.data = { ...(activeStep.data ?? {}), ...data };\n } else {\n Object.assign(taskMeasures, data);\n }\n }\n\n function log(message: string, meta?: JsonObject): void {\n const suffix = meta && Object.keys(meta).length > 0 ? ` ${JSON.stringify(meta)}` : '';\n appendWorkerLog(`${new Date().toISOString()} [task ${taskIndex}] ${message}${suffix}`);\n }\n\n async function step<T>(name: string, fn: () => Promise<T> | T, stepOptions: DefineStepOptions = {}): Promise<T> {\n const stepStartedAtMs = Date.now();\n const stepRecord: TaskStepRecord = {\n name,\n status: 'success',\n startedAt: new Date().toISOString(),\n completedAt: new Date().toISOString(),\n latencyMs: 0,\n };\n if (stepOptions.timeoutMs !== undefined) stepRecord.timeoutMs = stepOptions.timeoutMs;\n if (stepOptions.stepConcurrency !== undefined) stepRecord.concurrency = stepOptions.stepConcurrency;\n\n const shouldReportConcurrency = stepOptions.reportConcurrency ?? true;\n if (shouldReportConcurrency) {\n const stepConcurrency = stepOptions.concurrency ?? workerConcurrency;\n validatePositiveInteger(`step \"${name}\" concurrency`, stepConcurrency);\n targetByStep.set(name, stepConcurrency);\n activeByStep.set(name, (activeByStep.get(name) ?? 0) + 1);\n requestHeartbeat();\n }\n\n const previousStep = activeStep;\n activeStep = stepRecord;\n try {\n if (stepOptions.readiness === 'poll') {\n await waitForStepReady(name, stepOptions);\n }\n const value = await fn();\n appendWorkerLog(`${new Date().toISOString()} [task ${taskIndex}] ${name}`);\n return value;\n } catch (error) {\n stepRecord.status = 'error';\n stepRecord.errorCode = getErrorCode(error);\n appendWorkerLog(`${new Date().toISOString()} [task ${taskIndex}] ${name}`);\n appendWorkerLog(` error: ${error instanceof Error ? error.message : String(error)}`);\n throw error;\n } finally {\n activeStep = previousStep;\n stepRecord.completedAt = new Date().toISOString();\n stepRecord.latencyMs = Date.now() - stepStartedAtMs;\n steps.push(stepRecord);\n if (shouldReportConcurrency) {\n const nextActive = Math.max(0, (activeByStep.get(name) ?? 0) - 1);\n if (nextActive === 0) {\n activeByStep.delete(name);\n targetByStep.delete(name);\n } else {\n activeByStep.set(name, nextActive);\n }\n requestHeartbeat();\n }\n }\n }\n\n try {\n const data = await options.task({ assignment: claimed, taskIndex, step, measure, log });\n record.data = mergeMeasures(taskMeasures, toJsonObject(data));\n } catch (error) {\n record.status = 'error';\n record.errorCode = getErrorCode(error);\n record.data = mergeMeasures(taskMeasures, { errorMessage: error instanceof Error ? error.message : String(error) });\n } finally {\n record.completedAt = new Date().toISOString();\n record.latencyMs = Date.now() - startedAtMs;\n // A task with no explicit steps is recorded as a single implicit\n // 'task' step, so every task contributes at least one step row.\n if (steps.length === 0) {\n steps.push(implicitTaskStep(record, taskMeasures));\n }\n record.steps = steps;\n doneCount += 1;\n inFlightCount = Math.max(0, inFlightCount - 1);\n if (record.status !== 'success') errorCount += 1;\n }\n\n records.push(record);\n pending.push(record);\n options.onResult?.(record);\n if (pending.length >= batchSize) await flush(false);\n });\n\n await flush(true);\n\n const hasErrors = records.some((record) => record.status !== 'success');\n try {\n await runFinishHook(hasErrors ? 'error' : 'success');\n } catch (error) {\n if (!hasErrors) throw error;\n }\n\n if (hasErrors) {\n await client.failWorker(options.benchmarkSlug, options.runId, claimed.workerId, claimed.attemptId, new Error('One or more tasks failed'));\n } else {\n await client.completeWorker(options.benchmarkSlug, options.runId, claimed.workerId, claimed.attemptId);\n }\n\n return { assignment: claimed, records };\n } catch (error) {\n await flush(true).catch(() => {});\n await runFinishHook('error').catch(() => {});\n await client.failWorker(options.benchmarkSlug, options.runId, claimed.workerId, claimed.attemptId, error).catch(() => {});\n throw error;\n } finally {\n await uploadWorkerLogArtifact();\n clearInterval(heartbeat);\n clearInterval(resultFlush);\n }\n },\n };\n\n return client;\n}\n\n","import { createBenchmarkClient } from './client';\nimport type {\n BenchmarkAssignment,\n BenchmarkClient,\n BenchmarkClientConfig,\n CreateWorkerArtifactResponse,\n JsonObject,\n TaskResultRecord,\n WorkerConcurrencySample,\n} from './types';\n\nconst DEFAULT_REPORTER_BATCH_SIZE = 500;\nconst DEFAULT_READY_POLL_INTERVAL_MS = 1000;\n\nexport interface BenchmarkReporterConfig extends BenchmarkClientConfig {\n benchmarkSlug: string;\n runId: string;\n participantSlug: string;\n processKind?: string;\n processKey?: string;\n batchSize?: number;\n}\n\nexport interface BenchmarkReporterProgress {\n done: number;\n inFlight: number;\n errors: number;\n total?: number;\n}\n\nexport interface BenchmarkReporterArtifactInput {\n kind: string;\n name?: string;\n contentType?: string;\n body: BodyInit;\n metadata?: JsonObject;\n}\n\nexport interface BenchmarkReporterHeartbeatInput {\n currentStep?: string | null;\n concurrency?: WorkerConcurrencySample[];\n}\n\nexport interface BenchmarkReporterBarrierInput {\n step: string;\n timeoutMs?: number;\n pollIntervalMs?: number;\n active?: number;\n target?: number;\n concurrency?: WorkerConcurrencySample[];\n}\n\nexport interface BenchmarkReporterBarrierResult {\n active: number | null;\n target: number | null;\n ready: boolean;\n measuredAt: string;\n}\n\nexport class BenchmarkReporter {\n private readonly client: BenchmarkClient;\n private readonly assignment: BenchmarkAssignment;\n private readonly cfg: Required<Pick<BenchmarkReporterConfig, 'benchmarkSlug' | 'runId' | 'participantSlug' | 'batchSize'>>;\n private pending: TaskResultRecord[] = [];\n private sequenceNumber = 0;\n private flushChain: Promise<void> = Promise.resolve();\n private progress: BenchmarkReporterProgress;\n private barrier: { step: string; concurrency: WorkerConcurrencySample[] } | null = null;\n\n private constructor(client: BenchmarkClient, cfg: BenchmarkReporterConfig, assignment: BenchmarkAssignment) {\n this.client = client;\n this.assignment = assignment;\n this.cfg = {\n benchmarkSlug: cfg.benchmarkSlug,\n runId: cfg.runId,\n participantSlug: cfg.participantSlug,\n batchSize: cfg.batchSize ?? DEFAULT_REPORTER_BATCH_SIZE,\n };\n this.progress = { done: 0, inFlight: 0, errors: 0, total: assignment.taskRange.count };\n }\n\n static async claim(cfg: BenchmarkReporterConfig): Promise<BenchmarkReporter | null> {\n const client = createBenchmarkClient(cfg);\n try {\n const assignment = await client.claimWorker(cfg.benchmarkSlug, cfg.runId, cfg.participantSlug, {\n processKind: cfg.processKind,\n processKey: cfg.processKey,\n });\n return assignment ? new BenchmarkReporter(client, cfg, assignment) : null;\n } catch (error) {\n console.warn(\n `[benchsdk] failed to claim worker for ${cfg.benchmarkSlug}/${cfg.participantSlug}: ` +\n `${error instanceof Error ? error.message : String(error)}`,\n );\n return null;\n }\n }\n\n get workerAssignment(): BenchmarkAssignment {\n return this.assignment;\n }\n\n get taskCount(): number {\n return this.assignment.taskRange.count;\n }\n\n get taskIndexStart(): number {\n return this.assignment.taskRange.start;\n }\n\n setProgress(progress: BenchmarkReporterProgress): void {\n this.progress = { ...progress, total: progress.total ?? this.assignment.taskRange.count };\n }\n\n recordResult(record: TaskResultRecord): void {\n this.pending.push(record);\n if (this.pending.length >= this.cfg.batchSize) void this.flush(false);\n }\n\n async heartbeat(input: BenchmarkReporterHeartbeatInput = {}): Promise<void> {\n const barrier = this.barrier;\n const currentStep = barrier?.step ?? input.currentStep;\n const concurrency = barrier?.concurrency ?? input.concurrency;\n await this.client.heartbeatWorker(this.cfg.benchmarkSlug, this.cfg.runId, this.assignment.workerId, {\n attemptId: this.assignment.attemptId,\n progressDone: this.progress.done,\n progressInFlight: this.progress.inFlight,\n progressErrors: this.progress.errors,\n progressTotal: this.progress.total,\n ...(currentStep ? { currentStep } : {}),\n ...(concurrency ? { concurrency } : {}),\n }).catch(() => {});\n }\n\n async waitForStepReady(input: BenchmarkReporterBarrierInput): Promise<BenchmarkReporterBarrierResult> {\n const startedAt = Date.now();\n const pollIntervalMs = input.pollIntervalMs ?? DEFAULT_READY_POLL_INTERVAL_MS;\n const concurrency = input.concurrency ?? [{\n step: input.step,\n active: input.active ?? this.assignment.taskRange.count,\n target: input.target ?? this.assignment.taskRange.count,\n }];\n this.barrier = { step: input.step, concurrency };\n try {\n while (true) {\n await this.heartbeat({ currentStep: input.step, concurrency });\n const progress = await this.client.getRunProgress(this.cfg.benchmarkSlug, this.cfg.runId).catch(() => null);\n const participant = progress?.participants.find((item) => item.slug === this.cfg.participantSlug);\n const step = participant?.concurrency.find((item) => item.step === input.step);\n if (step?.ready) {\n return {\n active: step.active,\n target: step.target,\n ready: true,\n measuredAt: progress?.generatedAt ?? new Date().toISOString(),\n };\n }\n if (input.timeoutMs !== undefined && Date.now() - startedAt >= input.timeoutMs) {\n throw new Error(`Timed out waiting for benchmark step \"${input.step}\" to become ready.`);\n }\n await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));\n }\n } finally {\n this.barrier = null;\n }\n }\n\n uploadArtifact(input: BenchmarkReporterArtifactInput): Promise<CreateWorkerArtifactResponse | null> {\n return this.client.uploadWorkerArtifact(this.cfg.benchmarkSlug, this.cfg.runId, this.assignment.workerId, {\n attemptId: this.assignment.attemptId,\n kind: input.kind,\n name: input.name,\n contentType: input.contentType,\n metadata: input.metadata,\n body: input.body,\n }).catch((error) => {\n console.warn(\n `[benchsdk] failed to upload ${input.kind} artifact for worker ${this.assignment.workerId}: ` +\n `${error instanceof Error ? error.message : String(error)}`,\n );\n return null;\n });\n }\n\n flush(isFinal = false): Promise<void> {\n this.flushChain = this.flushChain.then(async () => {\n while (this.pending.length >= this.cfg.batchSize || (isFinal && this.pending.length > 0)) {\n const batch = this.pending.slice(0, this.cfg.batchSize);\n try {\n await this.client.sendTaskResults({\n benchmarkSlug: this.cfg.benchmarkSlug,\n runId: this.cfg.runId,\n workerId: this.assignment.workerId,\n attemptId: this.assignment.attemptId,\n sequenceNumber: this.sequenceNumber,\n isFinal: isFinal && batch.length === this.pending.length,\n records: batch,\n });\n } catch (error) {\n // Results that never reach the platform are invisible otherwise: the\n // worker still completes and the run just reports fewer tasks.\n console.warn(\n `[benchsdk] dropping ${this.pending.length} unsent task result(s) for worker ${this.assignment.workerId}: ` +\n `${error instanceof Error ? error.message : String(error)}`,\n );\n break;\n }\n this.pending.splice(0, batch.length);\n this.sequenceNumber += 1;\n }\n });\n return this.flushChain;\n }\n\n async finish(failed = false, error?: unknown): Promise<void> {\n await this.flush(true).catch(() => {});\n if (failed) {\n await this.client.failWorker(\n this.cfg.benchmarkSlug,\n this.cfg.runId,\n this.assignment.workerId,\n this.assignment.attemptId,\n error,\n ).catch(() => {});\n return;\n }\n await this.client.completeWorker(\n this.cfg.benchmarkSlug,\n this.cfg.runId,\n this.assignment.workerId,\n this.assignment.attemptId,\n ).catch(() => {});\n }\n}\n\nexport function claimBenchmarkReporter(config: BenchmarkReporterConfig): Promise<BenchmarkReporter | null> {\n return BenchmarkReporter.claim(config);\n}\n","import * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport { monitorEventLoopDelay } from 'node:perf_hooks';\n\nexport interface BenchmarkSystemMetricsSample {\n ts: string;\n uptimeMs: number;\n cpuUserUs: number;\n cpuSystemUs: number;\n memRssMb: number;\n memHeapUsedMb: number;\n memHeapTotalMb: number;\n memExternalMb: number;\n eventLoopP50Ms: number;\n eventLoopP99Ms: number;\n eventLoopMaxMs: number;\n loadavg1m: number;\n loadavg5m: number;\n loadavg15m: number;\n openFds: number | null;\n sockstat: Record<string, number> | null;\n}\n\nexport interface BenchmarkSystemMetricsCollector {\n sample(): BenchmarkSystemMetricsSample;\n stop(): void;\n}\n\nfunction readSockstat(): Record<string, number> | null {\n try {\n const data = fs.readFileSync('/proc/net/sockstat', 'utf-8');\n const out: Record<string, number> = {};\n for (const line of data.split('\\n')) {\n const index = line.indexOf(':');\n if (index < 0) continue;\n const section = line.slice(0, index).trim().toLowerCase();\n const parts = line.slice(index + 1).trim().split(/\\s+/);\n for (let i = 0; i + 1 < parts.length; i += 2) {\n const value = Number.parseInt(parts[i + 1], 10);\n if (!Number.isNaN(value)) out[`${section}_${parts[i]}`] = value;\n }\n }\n return out;\n } catch {\n return null;\n }\n}\n\nfunction countOpenFds(): number | null {\n try {\n return fs.readdirSync('/proc/self/fd').length;\n } catch {\n return null;\n }\n}\n\nexport function createSystemMetricsCollector(): BenchmarkSystemMetricsCollector {\n const startedAt = Date.now();\n const cpuBaseline = process.cpuUsage();\n const eventLoop = monitorEventLoopDelay({ resolution: 20 });\n eventLoop.enable();\n\n return {\n sample() {\n const cpu = process.cpuUsage(cpuBaseline);\n const memory = process.memoryUsage();\n const loadavg = os.loadavg();\n const sample: BenchmarkSystemMetricsSample = {\n ts: new Date().toISOString(),\n uptimeMs: Date.now() - startedAt,\n cpuUserUs: cpu.user,\n cpuSystemUs: cpu.system,\n memRssMb: Math.round(memory.rss / 1024 / 1024),\n memHeapUsedMb: Math.round(memory.heapUsed / 1024 / 1024),\n memHeapTotalMb: Math.round(memory.heapTotal / 1024 / 1024),\n memExternalMb: Math.round(memory.external / 1024 / 1024),\n eventLoopP50Ms: eventLoop.percentile(50) / 1e6,\n eventLoopP99Ms: eventLoop.percentile(99) / 1e6,\n eventLoopMaxMs: eventLoop.max / 1e6,\n loadavg1m: loadavg[0],\n loadavg5m: loadavg[1],\n loadavg15m: loadavg[2],\n openFds: countOpenFds(),\n sockstat: readSockstat(),\n };\n eventLoop.reset();\n return sample;\n },\n stop() {\n eventLoop.disable();\n },\n };\n}\n","/**\n * Base interface for a benchmark participant — the shared shape across all\n * benchmark categories (sandbox, ai-gateway, browser, storage). Each category\n * extends this with its own provider-specific fields.\n */\nexport interface BaseParticipant {\n /** Participant name (e.g. 'e2b', 'daytona', 'openrouter') */\n name: string;\n /** Environment variables that must all be set to run this participant */\n requiredEnvVars: string[];\n}\n\n/**\n/**\n * Filters `participants` down to those whose `requiredEnvVars` are all set\n * in `process.env`. Returns an object `{ available, skipped }` where `skipped`\n * includes the names and missing vars for logging.\n */\nexport function filterParticipantsByEnv<T extends BaseParticipant>(\n participants: T[],\n): { available: T[]; skipped: { name: string; missing: string[] }[] } {\n const available: T[] = [];\n const skipped: { name: string; missing: string[] }[] = [];\n\n for (const p of participants) {\n const missing = p.requiredEnvVars.filter((v) => !process.env[v]);\n if (missing.length > 0) {\n skipped.push({ name: p.name, missing });\n } else {\n available.push(p);\n }\n }\n\n return { available, skipped };\n}\n\n/**\n * Filters `all` down to the requested `names`, exiting with a clear error\n * if any name is unrecognized. Returns `all` unchanged when `names` is\n * undefined (no filter specified).\n */\nexport function selectParticipants<T extends BaseParticipant>(\n all: T[],\n names?: string[],\n): T[] {\n if (!names) return all;\n const unknown = names.filter((n) => !all.some((p) => p.name === n));\n if (unknown.length > 0) {\n console.error(`Unknown participant(s): ${unknown.join(', ')}`);\n console.error(`Available: ${all.map((p) => p.name).join(', ')}`);\n process.exit(1);\n }\n return all.filter((p) => names.includes(p.name));\n}\n"],"mappings":"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","names":["value","DEFAULT_READY_POLL_INTERVAL_MS","loadavg"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/client.ts"],"sourcesContent":["export { BenchmarkApiError, createBenchmarkClient } from './client';\nexport type { BenchmarkClient, BenchmarkClientConfig } from './client';\n\nexport type {\n BenchmarkArtifactDownload,\n BenchmarkAssignment,\n BenchmarkArtifact,\n BenchmarkConcurrencyPoint,\n BenchmarkLogLevel,\n BenchmarkLogOptions,\n BenchmarkStepOutcome,\n BenchmarkAnalyticsReadiness,\n BenchmarkEventRateBucket,\n BenchmarkFailurePoint,\n BenchmarkParticipant,\n BenchmarkResource,\n BenchmarkResultLatencySummary,\n BenchmarkResultsOverview,\n BenchmarkResultsOverviewAnalytics,\n BenchmarkResultsOverviewInput,\n BenchmarkResultsOverviewRun,\n BenchmarkResultSummary,\n BenchmarkRun,\n BenchmarkRunImports,\n BenchmarkRunAnalyticsSummary,\n BenchmarkRunImportsSummary,\n BenchmarkRunImportItem,\n BenchmarkRunResults,\n BenchmarkRunStatus,\n BenchmarkRunSummaryInput,\n BenchmarkRunSummaryMetric,\n BenchmarkRunSummaryResult,\n BenchmarkRunSummaryRunMetadata,\n BenchmarkRunSummaryScalar,\n BenchmarkRunTaskResults,\n BenchmarkRunTaskResultsInput,\n BenchmarkRunTimeline,\n BenchmarkRunTimelineInput,\n BenchmarkRunWorker,\n BenchmarkStepResultSummary,\n BenchmarkTaskBucket,\n BenchmarkWorkerAttempt,\n BenchmarkWorkerStatus,\n ClaimWorkerInput,\n CreateWorkerArtifactInput,\n CreateWorkerArtifactResponse,\n CreateRunInput,\n DefineStepOptions,\n JsonObject,\n JsonValue,\n PlanWorkersInput,\n RunProgress,\n RunProgressConcurrency,\n RunProgressParticipant,\n RunProgressParticipantCounts,\n RunProgressStatus,\n RunProgressSummary,\n RunProgressTaskCounts,\n RunProgressWorkerCounts,\n RunWorkerContext,\n RunWorkerOptions,\n RunWorkerResult,\n SendTaskResultsInput,\n TaskStepRecord,\n TaskResultRecord,\n TaskResultsResponse,\n TaskFunction,\n UpdateBenchmarkInput,\n UpdateParticipantInput,\n UpdateRunInput,\n UpdateWorkerInput,\n UpsertBenchmarkInput,\n UpsertParticipantInput,\n UploadWorkerArtifactInput,\n WorkerConcurrencySample,\n WorkerFinishContext,\n WorkerHeartbeatInput,\n} from '@benchsdk/api';\n\nexport {\n BenchmarkReporter,\n claimBenchmarkReporter,\n createSystemMetricsCollector,\n filterParticipantsByEnv,\n runWorker,\n selectParticipants,\n} from '@benchsdk/worker';\n\nexport type {\n BaseParticipant,\n BenchmarkReporterArtifactInput,\n BenchmarkReporterBarrierInput,\n BenchmarkReporterBarrierResult,\n BenchmarkReporterConfig,\n BenchmarkReporterHeartbeatInput,\n BenchmarkReporterProgress,\n BenchmarkSystemMetricsCollector,\n BenchmarkSystemMetricsSample,\n} from '@benchsdk/worker';\n","import { createBenchmarkClient as createApiClient, BenchmarkApiError } from '@benchsdk/api';\nimport { runWorker } from '@benchsdk/worker';\nimport type { BenchmarkClient as BenchmarkApiClient, BenchmarkClientConfig, RunWorkerOptions, RunWorkerResult } from '@benchsdk/api';\n\nexport { BenchmarkApiError };\n\nexport type BenchmarkClient = BenchmarkApiClient & {\n runWorker(options: RunWorkerOptions): Promise<RunWorkerResult>;\n};\n\nexport type { BenchmarkClientConfig } from '@benchsdk/api';\n\nexport function createBenchmarkClient(config: BenchmarkClientConfig = {}): BenchmarkClient {\n const apiClient = createApiClient(config);\n return {\n ...apiClient,\n runWorker: (options: RunWorkerOptions) => runWorker(apiClient, options),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,iBAA4E;AAC5E,oBAA0B;AAWnB,SAAS,sBAAsB,SAAgC,CAAC,GAAoB;AACzF,QAAM,gBAAY,WAAAA,uBAAgB,MAAM;AACxC,SAAO;AAAA,IACL,GAAG;AAAA,IACH,WAAW,CAAC,gBAA8B,yBAAU,WAAW,OAAO;AAAA,EACxE;AACF;;;AD6DA,IAAAC,iBAOO;","names":["createApiClient","import_worker"]}