veryfront 0.1.529 → 0.1.531

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/esm/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.529",
3
+ "version": "0.1.531",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "workspace": [
@@ -6,5 +6,5 @@
6
6
  import "../../../_dnt.polyfills.js";
7
7
  export { assertCompleted, assertContains, assertToolCalled, printTestResults, testAgent, type TestCase, type TestResult, type TestSuite, } from "./agent-tester.js";
8
8
  export { createDurableRunCanaryApiClient, createDurableRunCanaryRunner, type DurableRunCanaryApiClient, type DurableRunCanaryApiConfig, type DurableRunCanaryCase, type DurableRunCanaryCreateRootRunInput, type DurableRunCanaryMessage, type DurableRunCanaryPreparedCase, type DurableRunCanaryResult, type DurableRunCanaryRunnerConfig, durableRunCanaryRunnerInternals, type DurableRunCanaryRunSummary, type DurableRunCanarySendUserMessageInput, type DurableRunCanaryStartRunInput, getDurableRunCanaryMessageSchema, parseDurableRunCanaryRunSummary, } from "./durable-run-canaries/index.js";
9
- export { buildFailureSuffix, buildLiveEvalCaseTagSummary, buildLiveEvalRequestBody, type BuildLiveEvalRequestBodyInput, buildLiveEvalRuntimeSummary, buildLiveEvalStatusSummary, buildProgressLine, buildRuntimePerformanceSummary, containsOrderedSubsequence, containsSkillLoad, countStepStartedEvents, createFailedEvalResult, createLiveEvalCaseSupport, createPassedEvalResult, createPlainTextPdf, createSkippedEvalResult, hasEveryLiveEvalTag, hasFinished, type LiveEvalCase, type LiveEvalCaseMetadata, type LiveEvalCaseSelectionInput, type LiveEvalContext, type LiveEvalProjectFile, type LiveEvalProjectFileReaderInput, type LiveEvalRequestBody, type LiveEvalResultForPerformance, type LiveEvalResultForReport, type LiveEvalResultRecord, type LiveEvalRunnerConfig, liveEvalRunnerInternals, type LiveEvalRuntime, type PreparedLiveEvalInput, resolveLiveEvalRequestedCaseIds, type RuntimePerformanceSummary, selectLiveEvalCases, } from "./live-evals/index.js";
9
+ export { buildFailureSuffix, buildLiveEvalCaseTagSummary, buildLiveEvalRequestBody, type BuildLiveEvalRequestBodyInput, buildLiveEvalRuntimeSummary, buildLiveEvalStatusSummary, buildProgressLine, buildRuntimePerformanceSummary, cancelLiveEvalInputRequest, containsOrderedSubsequence, containsSkillLoad, countStepStartedEvents, createFailedEvalResult, createLiveEvalApiClient, createLiveEvalCaseSupport, createLiveEvalConversation, createLiveEvalProjectUploadFixture, createLiveEvalRelease, createPassedEvalResult, createPlainTextPdf, createSkippedEvalResult, deleteLiveEvalConversation, deleteLiveEvalProjectFile, getLiveEvalProjectFile, hasEveryLiveEvalTag, hasFinished, listOpenLiveEvalInputRequests, type LiveEvalApiClient, type LiveEvalApiContext, type LiveEvalCase, type LiveEvalCaseMetadata, type LiveEvalCaseSelectionInput, type LiveEvalContext, type LiveEvalConversationInput, type LiveEvalCreateConversationInput, type LiveEvalCreateReleaseInput, type LiveEvalInputRequestInput, type LiveEvalInputRequestRecord, type LiveEvalInputResponseValues, type LiveEvalProjectFile, type LiveEvalProjectFileInput, type LiveEvalProjectFileReaderInput, type LiveEvalProjectUploadFixtureInput, type LiveEvalRequestBody, type LiveEvalRequestTimeoutInput, type LiveEvalResultForPerformance, type LiveEvalResultForReport, type LiveEvalResultRecord, type LiveEvalRunnerConfig, liveEvalRunnerInternals, type LiveEvalRuntime, type LiveEvalSubmitInputResponseInput, type LiveEvalWaitForOpenInputRequestInput, type PreparedLiveEvalInput, resolveLiveEvalRequestedCaseIds, type RuntimePerformanceSummary, selectLiveEvalCases, submitLiveEvalInputResponse, waitForOpenLiveEvalInputRequest, } from "./live-evals/index.js";
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/testing/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,4BAA4B,CAAC;AAGpC,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,SAAS,GACf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,+BAA+B,EAC/B,4BAA4B,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EACzB,KAAK,kCAAkC,EACvC,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EACjC,KAAK,sBAAsB,EAC3B,KAAK,4BAA4B,EACjC,+BAA+B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,oCAAoC,EACzC,KAAK,6BAA6B,EAClC,gCAAgC,EAChC,+BAA+B,GAChC,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,kBAAkB,EAClB,2BAA2B,EAC3B,wBAAwB,EACxB,KAAK,6BAA6B,EAClC,2BAA2B,EAC3B,0BAA0B,EAC1B,iBAAiB,EACjB,8BAA8B,EAC9B,0BAA0B,EAC1B,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,WAAW,EACX,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,8BAA8B,EACnC,KAAK,mBAAmB,EACxB,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,uBAAuB,EACvB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,+BAA+B,EAC/B,KAAK,yBAAyB,EAC9B,mBAAmB,GACpB,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/testing/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,4BAA4B,CAAC;AAGpC,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,SAAS,GACf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,+BAA+B,EAC/B,4BAA4B,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EACzB,KAAK,kCAAkC,EACvC,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EACjC,KAAK,sBAAsB,EAC3B,KAAK,4BAA4B,EACjC,+BAA+B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,oCAAoC,EACzC,KAAK,6BAA6B,EAClC,gCAAgC,EAChC,+BAA+B,GAChC,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,kBAAkB,EAClB,2BAA2B,EAC3B,wBAAwB,EACxB,KAAK,6BAA6B,EAClC,2BAA2B,EAC3B,0BAA0B,EAC1B,iBAAiB,EACjB,8BAA8B,EAC9B,0BAA0B,EAC1B,0BAA0B,EAC1B,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,yBAAyB,EACzB,0BAA0B,EAC1B,kCAAkC,EAClC,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC1B,yBAAyB,EACzB,sBAAsB,EACtB,mBAAmB,EACnB,WAAW,EACX,6BAA6B,EAC7B,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC9B,KAAK,+BAA+B,EACpC,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAChC,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,8BAA8B,EACnC,KAAK,iCAAiC,EACtC,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,uBAAuB,EACvB,KAAK,eAAe,EACpB,KAAK,gCAAgC,EACrC,KAAK,oCAAoC,EACzC,KAAK,qBAAqB,EAC1B,+BAA+B,EAC/B,KAAK,yBAAyB,EAC9B,mBAAmB,EACnB,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,uBAAuB,CAAC"}
@@ -6,4 +6,4 @@
6
6
  import "../../../_dnt.polyfills.js";
7
7
  export { assertCompleted, assertContains, assertToolCalled, printTestResults, testAgent, } from "./agent-tester.js";
8
8
  export { createDurableRunCanaryApiClient, createDurableRunCanaryRunner, durableRunCanaryRunnerInternals, getDurableRunCanaryMessageSchema, parseDurableRunCanaryRunSummary, } from "./durable-run-canaries/index.js";
9
- export { buildFailureSuffix, buildLiveEvalCaseTagSummary, buildLiveEvalRequestBody, buildLiveEvalRuntimeSummary, buildLiveEvalStatusSummary, buildProgressLine, buildRuntimePerformanceSummary, containsOrderedSubsequence, containsSkillLoad, countStepStartedEvents, createFailedEvalResult, createLiveEvalCaseSupport, createPassedEvalResult, createPlainTextPdf, createSkippedEvalResult, hasEveryLiveEvalTag, hasFinished, liveEvalRunnerInternals, resolveLiveEvalRequestedCaseIds, selectLiveEvalCases, } from "./live-evals/index.js";
9
+ export { buildFailureSuffix, buildLiveEvalCaseTagSummary, buildLiveEvalRequestBody, buildLiveEvalRuntimeSummary, buildLiveEvalStatusSummary, buildProgressLine, buildRuntimePerformanceSummary, cancelLiveEvalInputRequest, containsOrderedSubsequence, containsSkillLoad, countStepStartedEvents, createFailedEvalResult, createLiveEvalApiClient, createLiveEvalCaseSupport, createLiveEvalConversation, createLiveEvalProjectUploadFixture, createLiveEvalRelease, createPassedEvalResult, createPlainTextPdf, createSkippedEvalResult, deleteLiveEvalConversation, deleteLiveEvalProjectFile, getLiveEvalProjectFile, hasEveryLiveEvalTag, hasFinished, listOpenLiveEvalInputRequests, liveEvalRunnerInternals, resolveLiveEvalRequestedCaseIds, selectLiveEvalCases, submitLiveEvalInputResponse, waitForOpenLiveEvalInputRequest, } from "./live-evals/index.js";
@@ -0,0 +1,78 @@
1
+ import type { InferSchema } from "../../../extensions/schema/index.js";
2
+ import type { LiveEvalProjectFile } from "./runner.js";
3
+ export interface LiveEvalApiContext {
4
+ apiUrl: string;
5
+ authToken: string;
6
+ projectId: string | null;
7
+ fetch?: (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
8
+ }
9
+ export interface LiveEvalRequestTimeoutInput {
10
+ requestTimeoutMs: number;
11
+ }
12
+ export interface LiveEvalCreateConversationInput extends LiveEvalRequestTimeoutInput {
13
+ title: string;
14
+ }
15
+ export interface LiveEvalConversationInput extends LiveEvalRequestTimeoutInput {
16
+ conversationId: string;
17
+ }
18
+ export interface LiveEvalProjectUploadFixtureInput extends LiveEvalRequestTimeoutInput {
19
+ filePath: string;
20
+ contentType: string;
21
+ body: BodyInit | Uint8Array;
22
+ size?: number;
23
+ pollIntervalMs?: number;
24
+ maxAttempts?: number;
25
+ }
26
+ export interface LiveEvalProjectFileInput extends LiveEvalRequestTimeoutInput {
27
+ filePath: string;
28
+ }
29
+ export interface LiveEvalCreateReleaseInput extends LiveEvalRequestTimeoutInput {
30
+ description?: string;
31
+ }
32
+ export interface LiveEvalWaitForOpenInputRequestInput extends LiveEvalConversationInput {
33
+ abortSignal: AbortSignal;
34
+ pollIntervalMs?: number;
35
+ timeoutMs?: number;
36
+ }
37
+ export interface LiveEvalInputResponseValues {
38
+ [key: string]: string | boolean | number | null;
39
+ }
40
+ export interface LiveEvalSubmitInputResponseInput extends LiveEvalRequestTimeoutInput {
41
+ conversationId: string;
42
+ inputRequestId: string;
43
+ values: LiveEvalInputResponseValues;
44
+ }
45
+ export interface LiveEvalInputRequestInput extends LiveEvalRequestTimeoutInput {
46
+ conversationId: string;
47
+ inputRequestId: string;
48
+ }
49
+ declare const getInputRequestRecordSchema: () => import("../../../internal-agents/schema.js").Schema<import("../../../extensions/schema/schema-validator.js").InferShape<{
50
+ id: import("../../../internal-agents/schema.js").Schema<string>;
51
+ status: import("../../../internal-agents/schema.js").Schema<string>;
52
+ }>>;
53
+ export type LiveEvalInputRequestRecord = InferSchema<ReturnType<typeof getInputRequestRecordSchema>>;
54
+ export interface LiveEvalApiClient {
55
+ createConversation(input: LiveEvalCreateConversationInput): Promise<string>;
56
+ deleteConversation(input: LiveEvalConversationInput): Promise<void>;
57
+ createProjectUploadFixture(input: LiveEvalProjectUploadFixtureInput): Promise<string>;
58
+ getProjectFile(input: LiveEvalProjectFileInput): Promise<LiveEvalProjectFile | null>;
59
+ createRelease(input: LiveEvalCreateReleaseInput): Promise<string>;
60
+ deleteProjectFile(input: LiveEvalProjectFileInput): Promise<void>;
61
+ listOpenInputRequests(input: LiveEvalConversationInput): Promise<LiveEvalInputRequestRecord[]>;
62
+ waitForOpenInputRequest(input: LiveEvalWaitForOpenInputRequestInput): Promise<string>;
63
+ submitInputResponse(input: LiveEvalSubmitInputResponseInput): Promise<void>;
64
+ cancelInputRequest(input: LiveEvalInputRequestInput): Promise<void>;
65
+ }
66
+ export declare function createLiveEvalApiClient(context: LiveEvalApiContext): LiveEvalApiClient;
67
+ export declare function createLiveEvalConversation(context: LiveEvalApiContext, input: LiveEvalCreateConversationInput): Promise<string>;
68
+ export declare function deleteLiveEvalConversation(context: LiveEvalApiContext, input: LiveEvalConversationInput): Promise<void>;
69
+ export declare function createLiveEvalProjectUploadFixture(context: LiveEvalApiContext, input: LiveEvalProjectUploadFixtureInput): Promise<string>;
70
+ export declare function getLiveEvalProjectFile(context: LiveEvalApiContext, input: LiveEvalProjectFileInput): Promise<LiveEvalProjectFile | null>;
71
+ export declare function createLiveEvalRelease(context: LiveEvalApiContext, input: LiveEvalCreateReleaseInput): Promise<string>;
72
+ export declare function deleteLiveEvalProjectFile(context: LiveEvalApiContext, input: LiveEvalProjectFileInput): Promise<void>;
73
+ export declare function listOpenLiveEvalInputRequests(context: LiveEvalApiContext, input: LiveEvalConversationInput): Promise<LiveEvalInputRequestRecord[]>;
74
+ export declare function waitForOpenLiveEvalInputRequest(context: LiveEvalApiContext, input: LiveEvalWaitForOpenInputRequestInput): Promise<string>;
75
+ export declare function submitLiveEvalInputResponse(context: LiveEvalApiContext, input: LiveEvalSubmitInputResponseInput): Promise<void>;
76
+ export declare function cancelLiveEvalInputRequest(context: LiveEvalApiContext, input: LiveEvalInputRequestInput): Promise<void>;
77
+ export {};
78
+ //# sourceMappingURL=api-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../../../../src/src/agent/testing/live-evals/api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,302 @@
1
+ import * as dntShim from "../../../../_dnt.shims.js";
2
+ import { ensureBuiltinSchemaValidator } from "../../../extensions/builtin-extensions.js";
3
+ import { defineSchema } from "../../../schemas/index.js";
4
+ ensureBuiltinSchemaValidator();
5
+ const getLiveEvalIdResponseSchema = defineSchema((v) => v.object({
6
+ id: v.string().optional(),
7
+ }));
8
+ const getProjectUploadResponseSchema = defineSchema((v) => v.object({
9
+ file_upload_url: v.string().optional(),
10
+ required_headers: v.record(v.string(), v.string()).optional(),
11
+ }));
12
+ const getProjectUploadListResponseSchema = defineSchema((v) => v.object({
13
+ data: v.array(v.object({ path: v.string().optional() }).passthrough()).optional(),
14
+ }));
15
+ const getProjectFileResponseSchema = defineSchema((v) => v.object({
16
+ path: v.string().optional(),
17
+ content: v.string().optional(),
18
+ }));
19
+ const getInputRequestRecordSchema = defineSchema((v) => v.object({
20
+ id: v.string(),
21
+ status: v.string(),
22
+ }));
23
+ const getInputRequestListResponseSchema = defineSchema((v) => v.object({
24
+ data: v.array(v.unknown()).optional(),
25
+ }));
26
+ function createLiveEvalAuthHeaders(context) {
27
+ const headers = new Headers();
28
+ headers.set("Authorization", `Bearer ${context.authToken}`);
29
+ return headers;
30
+ }
31
+ function createLiveEvalJsonHeaders(context) {
32
+ const headers = createLiveEvalAuthHeaders(context);
33
+ headers.set("Content-Type", "application/json");
34
+ return headers;
35
+ }
36
+ function requireLiveEvalProjectId(projectId, errorMessage) {
37
+ if (!projectId) {
38
+ throw new Error(errorMessage);
39
+ }
40
+ return projectId;
41
+ }
42
+ function createFetch(context) {
43
+ return context.fetch ?? fetch;
44
+ }
45
+ function createApiUrl(context, path) {
46
+ const baseHref = context.apiUrl.endsWith("/") ? context.apiUrl : `${context.apiUrl}/`;
47
+ const relativePath = path.startsWith("/") ? path.slice(1) : path;
48
+ return new URL(relativePath, baseHref);
49
+ }
50
+ function createProjectUploadHeaders(requiredHeaders, contentType) {
51
+ const uploadHeaders = new Headers(requiredHeaders);
52
+ if (!uploadHeaders.has("Content-Type")) {
53
+ uploadHeaders.set("Content-Type", contentType);
54
+ }
55
+ return uploadHeaders;
56
+ }
57
+ function getProjectUploadBodySize(body, explicitSize) {
58
+ if (typeof explicitSize === "number") {
59
+ return explicitSize;
60
+ }
61
+ if (typeof body === "string") {
62
+ return new TextEncoder().encode(body).byteLength;
63
+ }
64
+ if (body instanceof Blob) {
65
+ return body.size;
66
+ }
67
+ if (body instanceof URLSearchParams) {
68
+ return new TextEncoder().encode(body.toString()).byteLength;
69
+ }
70
+ if (body instanceof ArrayBuffer) {
71
+ return body.byteLength;
72
+ }
73
+ if (ArrayBuffer.isView(body)) {
74
+ return body.byteLength;
75
+ }
76
+ throw new Error("Project upload fixtures require size when body length cannot be inferred");
77
+ }
78
+ function createProjectUploadBody(body, contentType) {
79
+ if (body instanceof Blob) {
80
+ return body;
81
+ }
82
+ if (typeof body === "string") {
83
+ return new Blob([body], { type: contentType });
84
+ }
85
+ if (body instanceof Uint8Array) {
86
+ return new Blob([body.slice()], { type: contentType });
87
+ }
88
+ return body;
89
+ }
90
+ function getResponseText(response) {
91
+ return response.text();
92
+ }
93
+ async function wait(input) {
94
+ await new Promise((resolve) => {
95
+ dntShim.setTimeout(resolve, input.ms);
96
+ });
97
+ }
98
+ async function waitForProjectUploadFixture(context, input) {
99
+ const listUrl = createApiUrl(context, `/projects/${input.projectId}/uploads`);
100
+ const requestFetch = createFetch(context);
101
+ const maxAttempts = input.maxAttempts ?? 12;
102
+ const pollIntervalMs = input.pollIntervalMs ?? 2_000;
103
+ for (let attempt = 0; attempt < maxAttempts; attempt += 1) {
104
+ const listResponse = await requestFetch(listUrl, {
105
+ headers: createLiveEvalAuthHeaders(context),
106
+ signal: AbortSignal.timeout(input.requestTimeoutMs),
107
+ });
108
+ if (!listResponse.ok) {
109
+ throw new Error(`Failed to confirm project upload fixture: ${listResponse.status} ${await getResponseText(listResponse)}`);
110
+ }
111
+ const payload = getProjectUploadListResponseSchema().parse(await listResponse.json());
112
+ if (payload.data?.some((upload) => upload.path === input.filePath)) {
113
+ return input.filePath;
114
+ }
115
+ if (attempt + 1 < maxAttempts) {
116
+ await wait({ ms: pollIntervalMs });
117
+ }
118
+ }
119
+ throw new Error(`Project upload fixture did not appear in time: ${input.filePath}`);
120
+ }
121
+ export function createLiveEvalApiClient(context) {
122
+ return {
123
+ createConversation: (input) => createLiveEvalConversation(context, input),
124
+ deleteConversation: (input) => deleteLiveEvalConversation(context, input),
125
+ createProjectUploadFixture: (input) => createLiveEvalProjectUploadFixture(context, input),
126
+ getProjectFile: (input) => getLiveEvalProjectFile(context, input),
127
+ createRelease: (input) => createLiveEvalRelease(context, input),
128
+ deleteProjectFile: (input) => deleteLiveEvalProjectFile(context, input),
129
+ listOpenInputRequests: (input) => listOpenLiveEvalInputRequests(context, input),
130
+ waitForOpenInputRequest: (input) => waitForOpenLiveEvalInputRequest(context, input),
131
+ submitInputResponse: (input) => submitLiveEvalInputResponse(context, input),
132
+ cancelInputRequest: (input) => cancelLiveEvalInputRequest(context, input),
133
+ };
134
+ }
135
+ export async function createLiveEvalConversation(context, input) {
136
+ const response = await createFetch(context)(createApiUrl(context, "/conversations"), {
137
+ method: "POST",
138
+ headers: createLiveEvalJsonHeaders(context),
139
+ body: JSON.stringify({
140
+ ...(context.projectId ? { project_id: context.projectId } : {}),
141
+ title: input.title,
142
+ }),
143
+ signal: AbortSignal.timeout(input.requestTimeoutMs),
144
+ });
145
+ if (!response.ok) {
146
+ throw new Error(`Failed to create eval conversation: ${response.status} ${await getResponseText(response)}`);
147
+ }
148
+ const payload = getLiveEvalIdResponseSchema().parse(await response.json());
149
+ if (!payload.id) {
150
+ throw new Error("Conversation creation response did not include id");
151
+ }
152
+ return payload.id;
153
+ }
154
+ export async function deleteLiveEvalConversation(context, input) {
155
+ const response = await createFetch(context)(createApiUrl(context, `/conversations/${input.conversationId}`), {
156
+ method: "DELETE",
157
+ headers: createLiveEvalAuthHeaders(context),
158
+ signal: AbortSignal.timeout(input.requestTimeoutMs),
159
+ });
160
+ if (!response.ok && response.status !== 404) {
161
+ throw new Error(`Failed to delete eval conversation ${input.conversationId}: ${response.status} ${await getResponseText(response)}`);
162
+ }
163
+ }
164
+ export async function createLiveEvalProjectUploadFixture(context, input) {
165
+ const projectId = requireLiveEvalProjectId(context.projectId, "Project upload fixtures require a live-eval project id");
166
+ const createResponse = await createFetch(context)(createApiUrl(context, `/projects/${projectId}/uploads`), {
167
+ method: "POST",
168
+ headers: createLiveEvalJsonHeaders(context),
169
+ body: JSON.stringify({
170
+ file_path: input.filePath,
171
+ content_type: input.contentType,
172
+ size: getProjectUploadBodySize(input.body, input.size),
173
+ }),
174
+ signal: AbortSignal.timeout(input.requestTimeoutMs),
175
+ });
176
+ if (!createResponse.ok) {
177
+ throw new Error(`Failed to create project upload URL: ${createResponse.status} ${await getResponseText(createResponse)}`);
178
+ }
179
+ const createPayload = getProjectUploadResponseSchema().parse(await createResponse.json());
180
+ if (!createPayload.file_upload_url) {
181
+ throw new Error("Project upload response did not include file_upload_url");
182
+ }
183
+ const uploadResponse = await createFetch(context)(createPayload.file_upload_url, {
184
+ method: "PUT",
185
+ headers: createProjectUploadHeaders(createPayload.required_headers, input.contentType),
186
+ body: createProjectUploadBody(input.body, input.contentType),
187
+ signal: AbortSignal.timeout(input.requestTimeoutMs),
188
+ });
189
+ if (!uploadResponse.ok) {
190
+ throw new Error(`Failed to upload project fixture: ${uploadResponse.status} ${await getResponseText(uploadResponse)}`);
191
+ }
192
+ return waitForProjectUploadFixture(context, {
193
+ projectId,
194
+ filePath: input.filePath,
195
+ requestTimeoutMs: input.requestTimeoutMs,
196
+ pollIntervalMs: input.pollIntervalMs,
197
+ maxAttempts: input.maxAttempts,
198
+ });
199
+ }
200
+ export async function getLiveEvalProjectFile(context, input) {
201
+ const projectId = requireLiveEvalProjectId(context.projectId, "getLiveEvalProjectFile requires a live-eval project id");
202
+ const response = await createFetch(context)(createApiUrl(context, `/projects/${projectId}/files/${encodeURIComponent(input.filePath)}`), {
203
+ headers: createLiveEvalAuthHeaders(context),
204
+ signal: AbortSignal.timeout(input.requestTimeoutMs),
205
+ });
206
+ if (response.status === 404) {
207
+ return null;
208
+ }
209
+ if (!response.ok) {
210
+ throw new Error(`Failed to read project file: ${response.status} ${await getResponseText(response)}`);
211
+ }
212
+ const payload = getProjectFileResponseSchema().parse(await response.json());
213
+ return {
214
+ path: payload.path ?? input.filePath,
215
+ content: payload.content ?? "",
216
+ };
217
+ }
218
+ export async function createLiveEvalRelease(context, input) {
219
+ const projectId = requireLiveEvalProjectId(context.projectId, "createLiveEvalRelease requires a live-eval project id");
220
+ const response = await createFetch(context)(createApiUrl(context, `/projects/${projectId}/releases`), {
221
+ method: "POST",
222
+ headers: createLiveEvalJsonHeaders(context),
223
+ body: JSON.stringify({
224
+ description: input.description ?? "eval platform capability release",
225
+ }),
226
+ signal: AbortSignal.timeout(input.requestTimeoutMs),
227
+ });
228
+ if (!response.ok) {
229
+ throw new Error(`Failed to create release: ${response.status} ${await getResponseText(response)}`);
230
+ }
231
+ const payload = getLiveEvalIdResponseSchema().parse(await response.json());
232
+ if (!payload.id) {
233
+ throw new Error("Release creation response did not include id");
234
+ }
235
+ return payload.id;
236
+ }
237
+ export async function deleteLiveEvalProjectFile(context, input) {
238
+ const projectId = context.projectId;
239
+ if (!projectId) {
240
+ return;
241
+ }
242
+ const response = await createFetch(context)(createApiUrl(context, `/projects/${projectId}/files/${encodeURIComponent(input.filePath)}`), {
243
+ method: "DELETE",
244
+ headers: createLiveEvalAuthHeaders(context),
245
+ signal: AbortSignal.timeout(input.requestTimeoutMs),
246
+ });
247
+ if (!response.ok && response.status !== 404) {
248
+ throw new Error(`Failed to delete project file: ${response.status} ${await getResponseText(response)}`);
249
+ }
250
+ }
251
+ export async function listOpenLiveEvalInputRequests(context, input) {
252
+ const response = await createFetch(context)(createApiUrl(context, `/conversations/${input.conversationId}/input-requests?status=open`), {
253
+ headers: createLiveEvalAuthHeaders(context),
254
+ signal: AbortSignal.timeout(input.requestTimeoutMs),
255
+ });
256
+ if (!response.ok) {
257
+ throw new Error(`Failed to list eval input requests: ${response.status} ${await getResponseText(response)}`);
258
+ }
259
+ const payload = getInputRequestListResponseSchema().parse(await response.json());
260
+ return (payload.data ?? []).flatMap((item) => {
261
+ const parsed = getInputRequestRecordSchema().safeParse(item);
262
+ return parsed.success ? [parsed.data] : [];
263
+ });
264
+ }
265
+ export async function waitForOpenLiveEvalInputRequest(context, input) {
266
+ const timeoutMs = input.timeoutMs ?? 30_000;
267
+ const pollIntervalMs = input.pollIntervalMs ?? 500;
268
+ const deadline = Date.now() + timeoutMs;
269
+ while (Date.now() < deadline) {
270
+ if (input.abortSignal.aborted) {
271
+ throw new Error("Eval sidecar aborted before an input request appeared");
272
+ }
273
+ const requests = await listOpenLiveEvalInputRequests(context, input);
274
+ const request = requests[0];
275
+ if (request) {
276
+ return request.id;
277
+ }
278
+ await wait({ ms: pollIntervalMs });
279
+ }
280
+ throw new Error(`Timed out while waiting for an open input request in conversation ${input.conversationId}`);
281
+ }
282
+ export async function submitLiveEvalInputResponse(context, input) {
283
+ const response = await createFetch(context)(createApiUrl(context, `/conversations/${input.conversationId}/input-requests/${input.inputRequestId}/responses`), {
284
+ method: "POST",
285
+ headers: createLiveEvalJsonHeaders(context),
286
+ body: JSON.stringify({ values: input.values }),
287
+ signal: AbortSignal.timeout(input.requestTimeoutMs),
288
+ });
289
+ if (!response.ok) {
290
+ throw new Error(`Failed to submit eval input response: ${response.status} ${await getResponseText(response)}`);
291
+ }
292
+ }
293
+ export async function cancelLiveEvalInputRequest(context, input) {
294
+ const response = await createFetch(context)(createApiUrl(context, `/conversations/${input.conversationId}/input-requests/${input.inputRequestId}/cancel`), {
295
+ method: "POST",
296
+ headers: createLiveEvalAuthHeaders(context),
297
+ signal: AbortSignal.timeout(input.requestTimeoutMs),
298
+ });
299
+ if (!response.ok) {
300
+ throw new Error(`Failed to cancel eval input request: ${response.status} ${await getResponseText(response)}`);
301
+ }
302
+ }
@@ -1,3 +1,4 @@
1
+ export { cancelLiveEvalInputRequest, createLiveEvalApiClient, createLiveEvalConversation, createLiveEvalProjectUploadFixture, createLiveEvalRelease, deleteLiveEvalConversation, deleteLiveEvalProjectFile, getLiveEvalProjectFile, listOpenLiveEvalInputRequests, type LiveEvalApiClient, type LiveEvalApiContext, type LiveEvalConversationInput, type LiveEvalCreateConversationInput, type LiveEvalCreateReleaseInput, type LiveEvalInputRequestInput, type LiveEvalInputRequestRecord, type LiveEvalInputResponseValues, type LiveEvalProjectFileInput, type LiveEvalProjectUploadFixtureInput, type LiveEvalRequestTimeoutInput, type LiveEvalSubmitInputResponseInput, type LiveEvalWaitForOpenInputRequestInput, submitLiveEvalInputResponse, waitForOpenLiveEvalInputRequest, } from "./api-client.js";
1
2
  export { buildFailureSuffix, buildProgressLine, containsOrderedSubsequence, createPlainTextPdf, } from "./formatting.js";
2
3
  export { buildRuntimePerformanceSummary, type LiveEvalResultForPerformance, type LiveEvalRuntime, type RuntimePerformanceSummary, } from "./performance.js";
3
4
  export { buildLiveEvalRequestBody, type BuildLiveEvalRequestBodyInput, type LiveEvalRequestBody, } from "./request.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/src/agent/testing/live-evals/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,8BAA8B,EAC9B,KAAK,4BAA4B,EACjC,KAAK,eAAe,EACpB,KAAK,yBAAyB,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,wBAAwB,EACxB,KAAK,6BAA6B,EAClC,KAAK,mBAAmB,GACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,0BAA0B,EAC1B,mBAAmB,EACnB,KAAK,oBAAoB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAC5B,+BAA+B,EAC/B,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,KAAK,oBAAoB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,EACzB,WAAW,EACX,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,8BAA8B,EACnC,KAAK,oBAAoB,EACzB,uBAAuB,EACvB,KAAK,qBAAqB,GAC3B,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/src/agent/testing/live-evals/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,0BAA0B,EAC1B,kCAAkC,EAClC,qBAAqB,EACrB,0BAA0B,EAC1B,yBAAyB,EACzB,sBAAsB,EACtB,6BAA6B,EAC7B,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,+BAA+B,EACpC,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,EAC7B,KAAK,iCAAiC,EACtC,KAAK,2BAA2B,EAChC,KAAK,gCAAgC,EACrC,KAAK,oCAAoC,EACzC,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,8BAA8B,EAC9B,KAAK,4BAA4B,EACjC,KAAK,eAAe,EACpB,KAAK,yBAAyB,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,wBAAwB,EACxB,KAAK,6BAA6B,EAClC,KAAK,mBAAmB,GACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,0BAA0B,EAC1B,mBAAmB,EACnB,KAAK,oBAAoB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAC5B,+BAA+B,EAC/B,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,KAAK,oBAAoB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,EACzB,WAAW,EACX,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,8BAA8B,EACnC,KAAK,oBAAoB,EACzB,uBAAuB,EACvB,KAAK,qBAAqB,GAC3B,MAAM,aAAa,CAAC"}
@@ -1,3 +1,4 @@
1
+ export { cancelLiveEvalInputRequest, createLiveEvalApiClient, createLiveEvalConversation, createLiveEvalProjectUploadFixture, createLiveEvalRelease, deleteLiveEvalConversation, deleteLiveEvalProjectFile, getLiveEvalProjectFile, listOpenLiveEvalInputRequests, submitLiveEvalInputResponse, waitForOpenLiveEvalInputRequest, } from "./api-client.js";
1
2
  export { buildFailureSuffix, buildProgressLine, containsOrderedSubsequence, createPlainTextPdf, } from "./formatting.js";
2
3
  export { buildRuntimePerformanceSummary, } from "./performance.js";
3
4
  export { buildLiveEvalRequestBody, } from "./request.js";
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.1.529";
1
+ export declare const VERSION = "0.1.531";
2
2
  //# sourceMappingURL=version-constant.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Keep in sync with deno.json version.
2
2
  // scripts/release.ts updates this constant during releases.
3
- export const VERSION = "0.1.529";
3
+ export const VERSION = "0.1.531";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veryfront",
3
- "version": "0.1.529",
3
+ "version": "0.1.531",
4
4
  "description": "The simplest way to build AI-powered apps",
5
5
  "keywords": [
6
6
  "react",
package/src/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.529",
3
+ "version": "0.1.531",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "workspace": [
@@ -45,31 +45,55 @@ export {
45
45
  buildLiveEvalStatusSummary,
46
46
  buildProgressLine,
47
47
  buildRuntimePerformanceSummary,
48
+ cancelLiveEvalInputRequest,
48
49
  containsOrderedSubsequence,
49
50
  containsSkillLoad,
50
51
  countStepStartedEvents,
51
52
  createFailedEvalResult,
53
+ createLiveEvalApiClient,
52
54
  createLiveEvalCaseSupport,
55
+ createLiveEvalConversation,
56
+ createLiveEvalProjectUploadFixture,
57
+ createLiveEvalRelease,
53
58
  createPassedEvalResult,
54
59
  createPlainTextPdf,
55
60
  createSkippedEvalResult,
61
+ deleteLiveEvalConversation,
62
+ deleteLiveEvalProjectFile,
63
+ getLiveEvalProjectFile,
56
64
  hasEveryLiveEvalTag,
57
65
  hasFinished,
66
+ listOpenLiveEvalInputRequests,
67
+ type LiveEvalApiClient,
68
+ type LiveEvalApiContext,
58
69
  type LiveEvalCase,
59
70
  type LiveEvalCaseMetadata,
60
71
  type LiveEvalCaseSelectionInput,
61
72
  type LiveEvalContext,
73
+ type LiveEvalConversationInput,
74
+ type LiveEvalCreateConversationInput,
75
+ type LiveEvalCreateReleaseInput,
76
+ type LiveEvalInputRequestInput,
77
+ type LiveEvalInputRequestRecord,
78
+ type LiveEvalInputResponseValues,
62
79
  type LiveEvalProjectFile,
80
+ type LiveEvalProjectFileInput,
63
81
  type LiveEvalProjectFileReaderInput,
82
+ type LiveEvalProjectUploadFixtureInput,
64
83
  type LiveEvalRequestBody,
84
+ type LiveEvalRequestTimeoutInput,
65
85
  type LiveEvalResultForPerformance,
66
86
  type LiveEvalResultForReport,
67
87
  type LiveEvalResultRecord,
68
88
  type LiveEvalRunnerConfig,
69
89
  liveEvalRunnerInternals,
70
90
  type LiveEvalRuntime,
91
+ type LiveEvalSubmitInputResponseInput,
92
+ type LiveEvalWaitForOpenInputRequestInput,
71
93
  type PreparedLiveEvalInput,
72
94
  resolveLiveEvalRequestedCaseIds,
73
95
  type RuntimePerformanceSummary,
74
96
  selectLiveEvalCases,
97
+ submitLiveEvalInputResponse,
98
+ waitForOpenLiveEvalInputRequest,
75
99
  } from "./live-evals/index.js";
@@ -0,0 +1,568 @@
1
+ import * as dntShim from "../../../../_dnt.shims.js";
2
+ import { ensureBuiltinSchemaValidator } from "../../../extensions/builtin-extensions.js";
3
+ import type { InferSchema } from "../../../extensions/schema/index.js";
4
+ import { defineSchema } from "../../../schemas/index.js";
5
+ import type { LiveEvalProjectFile } from "./runner.js";
6
+
7
+ ensureBuiltinSchemaValidator();
8
+
9
+ export interface LiveEvalApiContext {
10
+ apiUrl: string;
11
+ authToken: string;
12
+ projectId: string | null;
13
+ fetch?: (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
14
+ }
15
+
16
+ export interface LiveEvalRequestTimeoutInput {
17
+ requestTimeoutMs: number;
18
+ }
19
+
20
+ export interface LiveEvalCreateConversationInput extends LiveEvalRequestTimeoutInput {
21
+ title: string;
22
+ }
23
+
24
+ export interface LiveEvalConversationInput extends LiveEvalRequestTimeoutInput {
25
+ conversationId: string;
26
+ }
27
+
28
+ export interface LiveEvalProjectUploadFixtureInput extends LiveEvalRequestTimeoutInput {
29
+ filePath: string;
30
+ contentType: string;
31
+ body: BodyInit | Uint8Array;
32
+ size?: number;
33
+ pollIntervalMs?: number;
34
+ maxAttempts?: number;
35
+ }
36
+
37
+ export interface LiveEvalProjectFileInput extends LiveEvalRequestTimeoutInput {
38
+ filePath: string;
39
+ }
40
+
41
+ export interface LiveEvalCreateReleaseInput extends LiveEvalRequestTimeoutInput {
42
+ description?: string;
43
+ }
44
+
45
+ export interface LiveEvalWaitForOpenInputRequestInput extends LiveEvalConversationInput {
46
+ abortSignal: AbortSignal;
47
+ pollIntervalMs?: number;
48
+ timeoutMs?: number;
49
+ }
50
+
51
+ export interface LiveEvalInputResponseValues {
52
+ [key: string]: string | boolean | number | null;
53
+ }
54
+
55
+ export interface LiveEvalSubmitInputResponseInput extends LiveEvalRequestTimeoutInput {
56
+ conversationId: string;
57
+ inputRequestId: string;
58
+ values: LiveEvalInputResponseValues;
59
+ }
60
+
61
+ export interface LiveEvalInputRequestInput extends LiveEvalRequestTimeoutInput {
62
+ conversationId: string;
63
+ inputRequestId: string;
64
+ }
65
+
66
+ const getLiveEvalIdResponseSchema = defineSchema((v) =>
67
+ v.object({
68
+ id: v.string().optional(),
69
+ })
70
+ );
71
+
72
+ const getProjectUploadResponseSchema = defineSchema((v) =>
73
+ v.object({
74
+ file_upload_url: v.string().optional(),
75
+ required_headers: v.record(v.string(), v.string()).optional(),
76
+ })
77
+ );
78
+
79
+ const getProjectUploadListResponseSchema = defineSchema((v) =>
80
+ v.object({
81
+ data: v.array(v.object({ path: v.string().optional() }).passthrough()).optional(),
82
+ })
83
+ );
84
+
85
+ const getProjectFileResponseSchema = defineSchema((v) =>
86
+ v.object({
87
+ path: v.string().optional(),
88
+ content: v.string().optional(),
89
+ })
90
+ );
91
+
92
+ const getInputRequestRecordSchema = defineSchema((v) =>
93
+ v.object({
94
+ id: v.string(),
95
+ status: v.string(),
96
+ })
97
+ );
98
+
99
+ const getInputRequestListResponseSchema = defineSchema((v) =>
100
+ v.object({
101
+ data: v.array(v.unknown()).optional(),
102
+ })
103
+ );
104
+
105
+ export type LiveEvalInputRequestRecord = InferSchema<
106
+ ReturnType<typeof getInputRequestRecordSchema>
107
+ >;
108
+
109
+ export interface LiveEvalApiClient {
110
+ createConversation(input: LiveEvalCreateConversationInput): Promise<string>;
111
+ deleteConversation(input: LiveEvalConversationInput): Promise<void>;
112
+ createProjectUploadFixture(input: LiveEvalProjectUploadFixtureInput): Promise<string>;
113
+ getProjectFile(input: LiveEvalProjectFileInput): Promise<LiveEvalProjectFile | null>;
114
+ createRelease(input: LiveEvalCreateReleaseInput): Promise<string>;
115
+ deleteProjectFile(input: LiveEvalProjectFileInput): Promise<void>;
116
+ listOpenInputRequests(input: LiveEvalConversationInput): Promise<LiveEvalInputRequestRecord[]>;
117
+ waitForOpenInputRequest(input: LiveEvalWaitForOpenInputRequestInput): Promise<string>;
118
+ submitInputResponse(input: LiveEvalSubmitInputResponseInput): Promise<void>;
119
+ cancelInputRequest(input: LiveEvalInputRequestInput): Promise<void>;
120
+ }
121
+
122
+ function createLiveEvalAuthHeaders(context: LiveEvalApiContext): Headers {
123
+ const headers = new Headers();
124
+ headers.set("Authorization", `Bearer ${context.authToken}`);
125
+ return headers;
126
+ }
127
+
128
+ function createLiveEvalJsonHeaders(context: LiveEvalApiContext): Headers {
129
+ const headers = createLiveEvalAuthHeaders(context);
130
+ headers.set("Content-Type", "application/json");
131
+ return headers;
132
+ }
133
+
134
+ function requireLiveEvalProjectId(projectId: string | null, errorMessage: string): string {
135
+ if (!projectId) {
136
+ throw new Error(errorMessage);
137
+ }
138
+
139
+ return projectId;
140
+ }
141
+
142
+ function createFetch(context: LiveEvalApiContext) {
143
+ return context.fetch ?? fetch;
144
+ }
145
+
146
+ function createApiUrl(context: LiveEvalApiContext, path: string): URL {
147
+ const baseHref = context.apiUrl.endsWith("/") ? context.apiUrl : `${context.apiUrl}/`;
148
+ const relativePath = path.startsWith("/") ? path.slice(1) : path;
149
+ return new URL(relativePath, baseHref);
150
+ }
151
+
152
+ function createProjectUploadHeaders(
153
+ requiredHeaders: Record<string, string> | undefined,
154
+ contentType: string,
155
+ ): Headers {
156
+ const uploadHeaders = new Headers(requiredHeaders);
157
+ if (!uploadHeaders.has("Content-Type")) {
158
+ uploadHeaders.set("Content-Type", contentType);
159
+ }
160
+
161
+ return uploadHeaders;
162
+ }
163
+
164
+ function getProjectUploadBodySize(
165
+ body: BodyInit | Uint8Array,
166
+ explicitSize: number | undefined,
167
+ ): number {
168
+ if (typeof explicitSize === "number") {
169
+ return explicitSize;
170
+ }
171
+ if (typeof body === "string") {
172
+ return new TextEncoder().encode(body).byteLength;
173
+ }
174
+ if (body instanceof Blob) {
175
+ return body.size;
176
+ }
177
+ if (body instanceof URLSearchParams) {
178
+ return new TextEncoder().encode(body.toString()).byteLength;
179
+ }
180
+ if (body instanceof ArrayBuffer) {
181
+ return body.byteLength;
182
+ }
183
+ if (ArrayBuffer.isView(body)) {
184
+ return body.byteLength;
185
+ }
186
+ throw new Error("Project upload fixtures require size when body length cannot be inferred");
187
+ }
188
+
189
+ function createProjectUploadBody(body: BodyInit | Uint8Array, contentType: string): BodyInit {
190
+ if (body instanceof Blob) {
191
+ return body;
192
+ }
193
+ if (typeof body === "string") {
194
+ return new Blob([body], { type: contentType });
195
+ }
196
+ if (body instanceof Uint8Array) {
197
+ return new Blob([body.slice()], { type: contentType });
198
+ }
199
+ return body;
200
+ }
201
+
202
+ function getResponseText(response: Response): Promise<string> {
203
+ return response.text();
204
+ }
205
+
206
+ async function wait(input: { ms: number }): Promise<void> {
207
+ await new Promise((resolve) => {
208
+ dntShim.setTimeout(resolve, input.ms);
209
+ });
210
+ }
211
+
212
+ async function waitForProjectUploadFixture(
213
+ context: LiveEvalApiContext,
214
+ input: {
215
+ projectId: string;
216
+ filePath: string;
217
+ requestTimeoutMs: number;
218
+ pollIntervalMs?: number;
219
+ maxAttempts?: number;
220
+ },
221
+ ): Promise<string> {
222
+ const listUrl = createApiUrl(context, `/projects/${input.projectId}/uploads`);
223
+ const requestFetch = createFetch(context);
224
+ const maxAttempts = input.maxAttempts ?? 12;
225
+ const pollIntervalMs = input.pollIntervalMs ?? 2_000;
226
+
227
+ for (let attempt = 0; attempt < maxAttempts; attempt += 1) {
228
+ const listResponse = await requestFetch(listUrl, {
229
+ headers: createLiveEvalAuthHeaders(context),
230
+ signal: AbortSignal.timeout(input.requestTimeoutMs),
231
+ });
232
+
233
+ if (!listResponse.ok) {
234
+ throw new Error(
235
+ `Failed to confirm project upload fixture: ${listResponse.status} ${await getResponseText(
236
+ listResponse,
237
+ )}`,
238
+ );
239
+ }
240
+
241
+ const payload = getProjectUploadListResponseSchema().parse(await listResponse.json());
242
+ if (payload.data?.some((upload) => upload.path === input.filePath)) {
243
+ return input.filePath;
244
+ }
245
+
246
+ if (attempt + 1 < maxAttempts) {
247
+ await wait({ ms: pollIntervalMs });
248
+ }
249
+ }
250
+
251
+ throw new Error(`Project upload fixture did not appear in time: ${input.filePath}`);
252
+ }
253
+
254
+ export function createLiveEvalApiClient(context: LiveEvalApiContext): LiveEvalApiClient {
255
+ return {
256
+ createConversation: (input) => createLiveEvalConversation(context, input),
257
+ deleteConversation: (input) => deleteLiveEvalConversation(context, input),
258
+ createProjectUploadFixture: (input) => createLiveEvalProjectUploadFixture(context, input),
259
+ getProjectFile: (input) => getLiveEvalProjectFile(context, input),
260
+ createRelease: (input) => createLiveEvalRelease(context, input),
261
+ deleteProjectFile: (input) => deleteLiveEvalProjectFile(context, input),
262
+ listOpenInputRequests: (input) => listOpenLiveEvalInputRequests(context, input),
263
+ waitForOpenInputRequest: (input) => waitForOpenLiveEvalInputRequest(context, input),
264
+ submitInputResponse: (input) => submitLiveEvalInputResponse(context, input),
265
+ cancelInputRequest: (input) => cancelLiveEvalInputRequest(context, input),
266
+ } satisfies LiveEvalApiClient;
267
+ }
268
+
269
+ export async function createLiveEvalConversation(
270
+ context: LiveEvalApiContext,
271
+ input: LiveEvalCreateConversationInput,
272
+ ): Promise<string> {
273
+ const response = await createFetch(context)(createApiUrl(context, "/conversations"), {
274
+ method: "POST",
275
+ headers: createLiveEvalJsonHeaders(context),
276
+ body: JSON.stringify({
277
+ ...(context.projectId ? { project_id: context.projectId } : {}),
278
+ title: input.title,
279
+ }),
280
+ signal: AbortSignal.timeout(input.requestTimeoutMs),
281
+ });
282
+
283
+ if (!response.ok) {
284
+ throw new Error(
285
+ `Failed to create eval conversation: ${response.status} ${await getResponseText(response)}`,
286
+ );
287
+ }
288
+
289
+ const payload = getLiveEvalIdResponseSchema().parse(await response.json());
290
+ if (!payload.id) {
291
+ throw new Error("Conversation creation response did not include id");
292
+ }
293
+
294
+ return payload.id;
295
+ }
296
+
297
+ export async function deleteLiveEvalConversation(
298
+ context: LiveEvalApiContext,
299
+ input: LiveEvalConversationInput,
300
+ ): Promise<void> {
301
+ const response = await createFetch(context)(
302
+ createApiUrl(context, `/conversations/${input.conversationId}`),
303
+ {
304
+ method: "DELETE",
305
+ headers: createLiveEvalAuthHeaders(context),
306
+ signal: AbortSignal.timeout(input.requestTimeoutMs),
307
+ },
308
+ );
309
+
310
+ if (!response.ok && response.status !== 404) {
311
+ throw new Error(
312
+ `Failed to delete eval conversation ${input.conversationId}: ${response.status} ${await getResponseText(
313
+ response,
314
+ )}`,
315
+ );
316
+ }
317
+ }
318
+
319
+ export async function createLiveEvalProjectUploadFixture(
320
+ context: LiveEvalApiContext,
321
+ input: LiveEvalProjectUploadFixtureInput,
322
+ ): Promise<string> {
323
+ const projectId = requireLiveEvalProjectId(
324
+ context.projectId,
325
+ "Project upload fixtures require a live-eval project id",
326
+ );
327
+
328
+ const createResponse = await createFetch(context)(
329
+ createApiUrl(context, `/projects/${projectId}/uploads`),
330
+ {
331
+ method: "POST",
332
+ headers: createLiveEvalJsonHeaders(context),
333
+ body: JSON.stringify({
334
+ file_path: input.filePath,
335
+ content_type: input.contentType,
336
+ size: getProjectUploadBodySize(input.body, input.size),
337
+ }),
338
+ signal: AbortSignal.timeout(input.requestTimeoutMs),
339
+ },
340
+ );
341
+
342
+ if (!createResponse.ok) {
343
+ throw new Error(
344
+ `Failed to create project upload URL: ${createResponse.status} ${await getResponseText(
345
+ createResponse,
346
+ )}`,
347
+ );
348
+ }
349
+
350
+ const createPayload = getProjectUploadResponseSchema().parse(await createResponse.json());
351
+ if (!createPayload.file_upload_url) {
352
+ throw new Error("Project upload response did not include file_upload_url");
353
+ }
354
+
355
+ const uploadResponse = await createFetch(context)(createPayload.file_upload_url, {
356
+ method: "PUT",
357
+ headers: createProjectUploadHeaders(createPayload.required_headers, input.contentType),
358
+ body: createProjectUploadBody(input.body, input.contentType),
359
+ signal: AbortSignal.timeout(input.requestTimeoutMs),
360
+ });
361
+
362
+ if (!uploadResponse.ok) {
363
+ throw new Error(
364
+ `Failed to upload project fixture: ${uploadResponse.status} ${await getResponseText(
365
+ uploadResponse,
366
+ )}`,
367
+ );
368
+ }
369
+
370
+ return waitForProjectUploadFixture(context, {
371
+ projectId,
372
+ filePath: input.filePath,
373
+ requestTimeoutMs: input.requestTimeoutMs,
374
+ pollIntervalMs: input.pollIntervalMs,
375
+ maxAttempts: input.maxAttempts,
376
+ });
377
+ }
378
+
379
+ export async function getLiveEvalProjectFile(
380
+ context: LiveEvalApiContext,
381
+ input: LiveEvalProjectFileInput,
382
+ ): Promise<LiveEvalProjectFile | null> {
383
+ const projectId = requireLiveEvalProjectId(
384
+ context.projectId,
385
+ "getLiveEvalProjectFile requires a live-eval project id",
386
+ );
387
+ const response = await createFetch(context)(
388
+ createApiUrl(context, `/projects/${projectId}/files/${encodeURIComponent(input.filePath)}`),
389
+ {
390
+ headers: createLiveEvalAuthHeaders(context),
391
+ signal: AbortSignal.timeout(input.requestTimeoutMs),
392
+ },
393
+ );
394
+
395
+ if (response.status === 404) {
396
+ return null;
397
+ }
398
+
399
+ if (!response.ok) {
400
+ throw new Error(
401
+ `Failed to read project file: ${response.status} ${await getResponseText(response)}`,
402
+ );
403
+ }
404
+
405
+ const payload = getProjectFileResponseSchema().parse(await response.json());
406
+ return {
407
+ path: payload.path ?? input.filePath,
408
+ content: payload.content ?? "",
409
+ };
410
+ }
411
+
412
+ export async function createLiveEvalRelease(
413
+ context: LiveEvalApiContext,
414
+ input: LiveEvalCreateReleaseInput,
415
+ ): Promise<string> {
416
+ const projectId = requireLiveEvalProjectId(
417
+ context.projectId,
418
+ "createLiveEvalRelease requires a live-eval project id",
419
+ );
420
+ const response = await createFetch(context)(
421
+ createApiUrl(context, `/projects/${projectId}/releases`),
422
+ {
423
+ method: "POST",
424
+ headers: createLiveEvalJsonHeaders(context),
425
+ body: JSON.stringify({
426
+ description: input.description ?? "eval platform capability release",
427
+ }),
428
+ signal: AbortSignal.timeout(input.requestTimeoutMs),
429
+ },
430
+ );
431
+
432
+ if (!response.ok) {
433
+ throw new Error(
434
+ `Failed to create release: ${response.status} ${await getResponseText(response)}`,
435
+ );
436
+ }
437
+
438
+ const payload = getLiveEvalIdResponseSchema().parse(await response.json());
439
+ if (!payload.id) {
440
+ throw new Error("Release creation response did not include id");
441
+ }
442
+
443
+ return payload.id;
444
+ }
445
+
446
+ export async function deleteLiveEvalProjectFile(
447
+ context: LiveEvalApiContext,
448
+ input: LiveEvalProjectFileInput,
449
+ ): Promise<void> {
450
+ const projectId = context.projectId;
451
+ if (!projectId) {
452
+ return;
453
+ }
454
+
455
+ const response = await createFetch(context)(
456
+ createApiUrl(context, `/projects/${projectId}/files/${encodeURIComponent(input.filePath)}`),
457
+ {
458
+ method: "DELETE",
459
+ headers: createLiveEvalAuthHeaders(context),
460
+ signal: AbortSignal.timeout(input.requestTimeoutMs),
461
+ },
462
+ );
463
+
464
+ if (!response.ok && response.status !== 404) {
465
+ throw new Error(
466
+ `Failed to delete project file: ${response.status} ${await getResponseText(response)}`,
467
+ );
468
+ }
469
+ }
470
+
471
+ export async function listOpenLiveEvalInputRequests(
472
+ context: LiveEvalApiContext,
473
+ input: LiveEvalConversationInput,
474
+ ): Promise<LiveEvalInputRequestRecord[]> {
475
+ const response = await createFetch(context)(
476
+ createApiUrl(context, `/conversations/${input.conversationId}/input-requests?status=open`),
477
+ {
478
+ headers: createLiveEvalAuthHeaders(context),
479
+ signal: AbortSignal.timeout(input.requestTimeoutMs),
480
+ },
481
+ );
482
+
483
+ if (!response.ok) {
484
+ throw new Error(
485
+ `Failed to list eval input requests: ${response.status} ${await getResponseText(response)}`,
486
+ );
487
+ }
488
+
489
+ const payload = getInputRequestListResponseSchema().parse(await response.json());
490
+ return (payload.data ?? []).flatMap((item) => {
491
+ const parsed = getInputRequestRecordSchema().safeParse(item);
492
+ return parsed.success ? [parsed.data] : [];
493
+ });
494
+ }
495
+
496
+ export async function waitForOpenLiveEvalInputRequest(
497
+ context: LiveEvalApiContext,
498
+ input: LiveEvalWaitForOpenInputRequestInput,
499
+ ): Promise<string> {
500
+ const timeoutMs = input.timeoutMs ?? 30_000;
501
+ const pollIntervalMs = input.pollIntervalMs ?? 500;
502
+ const deadline = Date.now() + timeoutMs;
503
+
504
+ while (Date.now() < deadline) {
505
+ if (input.abortSignal.aborted) {
506
+ throw new Error("Eval sidecar aborted before an input request appeared");
507
+ }
508
+
509
+ const requests = await listOpenLiveEvalInputRequests(context, input);
510
+ const request = requests[0];
511
+ if (request) {
512
+ return request.id;
513
+ }
514
+
515
+ await wait({ ms: pollIntervalMs });
516
+ }
517
+
518
+ throw new Error(
519
+ `Timed out while waiting for an open input request in conversation ${input.conversationId}`,
520
+ );
521
+ }
522
+
523
+ export async function submitLiveEvalInputResponse(
524
+ context: LiveEvalApiContext,
525
+ input: LiveEvalSubmitInputResponseInput,
526
+ ): Promise<void> {
527
+ const response = await createFetch(context)(
528
+ createApiUrl(
529
+ context,
530
+ `/conversations/${input.conversationId}/input-requests/${input.inputRequestId}/responses`,
531
+ ),
532
+ {
533
+ method: "POST",
534
+ headers: createLiveEvalJsonHeaders(context),
535
+ body: JSON.stringify({ values: input.values }),
536
+ signal: AbortSignal.timeout(input.requestTimeoutMs),
537
+ },
538
+ );
539
+
540
+ if (!response.ok) {
541
+ throw new Error(
542
+ `Failed to submit eval input response: ${response.status} ${await getResponseText(response)}`,
543
+ );
544
+ }
545
+ }
546
+
547
+ export async function cancelLiveEvalInputRequest(
548
+ context: LiveEvalApiContext,
549
+ input: LiveEvalInputRequestInput,
550
+ ): Promise<void> {
551
+ const response = await createFetch(context)(
552
+ createApiUrl(
553
+ context,
554
+ `/conversations/${input.conversationId}/input-requests/${input.inputRequestId}/cancel`,
555
+ ),
556
+ {
557
+ method: "POST",
558
+ headers: createLiveEvalAuthHeaders(context),
559
+ signal: AbortSignal.timeout(input.requestTimeoutMs),
560
+ },
561
+ );
562
+
563
+ if (!response.ok) {
564
+ throw new Error(
565
+ `Failed to cancel eval input request: ${response.status} ${await getResponseText(response)}`,
566
+ );
567
+ }
568
+ }
@@ -1,3 +1,29 @@
1
+ export {
2
+ cancelLiveEvalInputRequest,
3
+ createLiveEvalApiClient,
4
+ createLiveEvalConversation,
5
+ createLiveEvalProjectUploadFixture,
6
+ createLiveEvalRelease,
7
+ deleteLiveEvalConversation,
8
+ deleteLiveEvalProjectFile,
9
+ getLiveEvalProjectFile,
10
+ listOpenLiveEvalInputRequests,
11
+ type LiveEvalApiClient,
12
+ type LiveEvalApiContext,
13
+ type LiveEvalConversationInput,
14
+ type LiveEvalCreateConversationInput,
15
+ type LiveEvalCreateReleaseInput,
16
+ type LiveEvalInputRequestInput,
17
+ type LiveEvalInputRequestRecord,
18
+ type LiveEvalInputResponseValues,
19
+ type LiveEvalProjectFileInput,
20
+ type LiveEvalProjectUploadFixtureInput,
21
+ type LiveEvalRequestTimeoutInput,
22
+ type LiveEvalSubmitInputResponseInput,
23
+ type LiveEvalWaitForOpenInputRequestInput,
24
+ submitLiveEvalInputResponse,
25
+ waitForOpenLiveEvalInputRequest,
26
+ } from "./api-client.js";
1
27
  export {
2
28
  buildFailureSuffix,
3
29
  buildProgressLine,
@@ -1,3 +1,3 @@
1
1
  // Keep in sync with deno.json version.
2
2
  // scripts/release.ts updates this constant during releases.
3
- export const VERSION = "0.1.529";
3
+ export const VERSION = "0.1.531";