openpond-sdk 0.1.2 → 0.1.4
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/TASKSETS.md +31 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +2 -2
- package/dist/learning.js +8 -0
- package/dist/learning.js.map +2 -2
- package/dist/taskset-catalog.js +114 -0
- package/dist/taskset-catalog.js.map +7 -0
- package/dist/types/packages/sdk/src/learning.d.ts +23 -1
- package/dist/types/packages/sdk/src/learning.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-catalog.d.ts +84 -0
- package/dist/types/packages/sdk/src/taskset-catalog.d.ts.map +1 -0
- package/package.json +8 -3
package/dist/learning.js
CHANGED
|
@@ -4,6 +4,8 @@ import {
|
|
|
4
4
|
LearningCommandRequestSchema,
|
|
5
5
|
LearningOperationResultSchema,
|
|
6
6
|
LearningReadRequestSchema,
|
|
7
|
+
TaskEvidenceInspectionResultSchema,
|
|
8
|
+
sameLearningRef,
|
|
7
9
|
assertLearningRequestJson,
|
|
8
10
|
learningResourceSchemas
|
|
9
11
|
} from "@openpond/evals/learning";
|
|
@@ -59,6 +61,12 @@ var OpenPondLearningClient = class {
|
|
|
59
61
|
const request = LearningReadRequestSchema.parse({ action: "get", scope: this.#options.scope, kind, id, ...revision === void 0 ? {} : { revision } });
|
|
60
62
|
return learningResourceSchemas[kind].parse(await this.#request("read", request, options));
|
|
61
63
|
}
|
|
64
|
+
async inspectEvidence(evidence, options = {}) {
|
|
65
|
+
const request = LearningReadRequestSchema.parse({ action: "inspect_evidence", scope: this.#options.scope, evidence });
|
|
66
|
+
const result = TaskEvidenceInspectionResultSchema.parse(await this.#request("read", request, options));
|
|
67
|
+
if (!sameLearningRef(result.evidence, evidence)) throw new OpenPondLearningError(502, "evidence_identity_mismatch", "Inspection did not match the requested evidence release.", null);
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
62
70
|
async list(kind, query = {}, options = {}) {
|
|
63
71
|
const request = LearningReadRequestSchema.parse({ action: "list", scope: this.#options.scope, kind, ...query });
|
|
64
72
|
return z.object({ items: z.array(learningResourceSchemas[kind]).max(100), nextCursor: z.string().nullable() }).strict().parse(await this.#request("read", request, options));
|
package/dist/learning.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/learning.ts"],
|
|
4
|
-
"sourcesContent": ["import { z } from \"zod\";\nimport {\n LearningCommandRequestSchema, LearningOperationResultSchema, LearningReadRequestSchema,\n assertLearningRequestJson,\n learningResourceSchemas, type LearningCommand, type LearningOperationResult,\n type LearningResourceFor, type LearningResourceKind, type LearningResourcePage,\n type LearningResourceQuery, type TaskExampleSubmission, type TaskFeedbackSubmission,\n} from \"@openpond/evals/learning\";\nimport { assertBoundedTaskJson } from \"@openpond/evals/task-schema\";\n\nexport * from \"@openpond/evals/learning\";\nexport * from \"@openpond/evals/rewards\";\n\nexport interface OpenPondLearningClientOptions {\n apiKey: string;\n baseUrl: string;\n /** Local profile or hosted team scope. The server checks the credential's ownership. */\n scope: string;\n fetch?: typeof globalThis.fetch;\n}\nexport interface LearningRequestOptions { signal?: AbortSignal }\nexport const LearningBatchPublicationSchema = z.object({\n batchId: z.string().trim().min(1).max(500), modelProjectId: z.string().trim().min(1).max(500),\n}).strict();\nexport const LearningBatchPublicationResultSchema = z.object({\n batchId: z.string().min(1), projectId: z.string().min(1), tasksetId: z.string().min(1),\n releaseId: z.string().min(1), revision: z.number().int().positive(), contentHash: z.string().regex(/^[a-f0-9]{64}$/),\n}).strict();\nexport class OpenPondLearningError extends Error {\n constructor(readonly status: number, readonly code: string, message: string, readonly details: unknown) {\n super(message);\n this.name = \"OpenPondLearningError\";\n }\n}\n\n/** The same portable commands are sent to the local and hosted execution owner. */\nexport class OpenPondLearningClient {\n readonly #options: OpenPondLearningClientOptions;\n constructor(options: OpenPondLearningClientOptions) {\n if (!options.apiKey.trim() || !options.scope.trim()) throw new Error(\"Learning API key and scope are required.\");\n const url = new URL(options.baseUrl);\n if (![\"http:\", \"https:\"].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new Error(\"Learning base URL must be an HTTP(S) endpoint without credentials, query, or fragment.\");\n this.#options = { ...options, baseUrl: url.toString().replace(/\\/+$/, \"\") };\n }\n\n async command(command: LearningCommand, options: LearningRequestOptions = {}): Promise<LearningOperationResult> {\n assertLearningRequestJson(command);\n const request = LearningCommandRequestSchema.parse({ scope: this.#options.scope, command });\n const result = LearningOperationResultSchema.parse(await this.#request(\"commands\", request, options));\n if (result.operationId !== command.operationId) throw new OpenPondLearningError(502, \"operation_identity_mismatch\", \"Learning response did not match the submitted operation.\", null);\n return result;\n }\n\n submitExample(example: TaskExampleSubmission, options: LearningRequestOptions = {}) {\n return this.command({ action: \"submit_example\", operationId: example.idempotencyKey, example }, options);\n }\n\n submitFeedback(feedback: TaskFeedbackSubmission, options: LearningRequestOptions = {}) {\n return this.command({ action: \"submit_feedback\", operationId: feedback.idempotencyKey, feedback }, options);\n }\n\n async get<K extends LearningResourceKind>(kind: K, id: string, revision?: number, options: LearningRequestOptions = {}): Promise<LearningResourceFor<K>> {\n const request = LearningReadRequestSchema.parse({ action: \"get\", scope: this.#options.scope, kind, id, ...(revision === undefined ? {} : { revision }) });\n return learningResourceSchemas[kind].parse(await this.#request(\"read\", request, options)) as LearningResourceFor<K>;\n }\n\n async list<K extends LearningResourceKind>(kind: K, query: Partial<LearningResourceQuery> = {}, options: LearningRequestOptions = {}): Promise<LearningResourcePage<K>> {\n const request = LearningReadRequestSchema.parse({ action: \"list\", scope: this.#options.scope, kind, ...query });\n return z.object({ items: z.array(learningResourceSchemas[kind]).max(100), nextCursor: z.string().nullable() }).strict().parse(await this.#request(\"read\", request, options)) as LearningResourcePage<K>;\n }\n\n /** Hosted publication only: stores an immutable package and attaches it, without starting training. */\n async publishBatch(input: z.infer<typeof LearningBatchPublicationSchema>, options: LearningRequestOptions = {}) {\n const request = LearningBatchPublicationSchema.parse(input);\n const result = LearningBatchPublicationResultSchema.parse(await this.#request(\"publish-batch\", { ...request, scope: this.#options.scope }, options));\n if (result.batchId !== request.batchId) throw new OpenPondLearningError(502, \"batch_identity_mismatch\", \"Published batch response did not match the requested batch.\", null);\n return result;\n }\n\n async #request(endpoint: \"commands\" | \"read\" | \"publish-batch\", body: unknown, options: LearningRequestOptions): Promise<unknown> {\n assertBoundedTaskJson(body, 16_777_216);\n const response = await (this.#options.fetch ?? globalThis.fetch)(`${this.#options.baseUrl}/v1/learning/${endpoint}`, {\n method: \"POST\", headers: { Authorization: `Bearer ${this.#options.apiKey}`, \"Content-Type\": \"application/json\", Accept: \"application/json\", \"X-OpenPond-Team-Id\": this.#options.scope }, body: JSON.stringify(body), signal: options.signal,\n redirect: \"error\",\n });\n const payload = await readBoundedLearningResponse(response);\n if (!response.ok) {\n const error = z.object({ code: z.string().optional(), error: z.string().optional() }).passthrough().safeParse(payload);\n throw new OpenPondLearningError(response.status, error.success ? error.data.code ?? \"learning_request_failed\" : \"learning_request_failed\", error.success ? error.data.error ?? `Learning request failed (${response.status}).` : `Learning request failed (${response.status}).`, payload);\n }\n return payload;\n }\n}\n\nasync function readBoundedLearningResponse(response: Response): Promise<unknown> {\n const maximumBytes = 16_777_216;\n const reader = response.body?.getReader();\n if (!reader) throw new OpenPondLearningError(response.status, \"empty_response\", \"Learning response was empty.\", null);\n const decoder = new TextDecoder();\n let bytes = 0;\n let text = \"\";\n try {\n while (true) {\n const next = await reader.read();\n if (next.done) break;\n bytes += next.value.byteLength;\n if (bytes > maximumBytes) throw new OpenPondLearningError(response.status, \"response_too_large\", \"Learning response exceeded 16 MiB; request a smaller page.\", null);\n text += decoder.decode(next.value, { stream: true });\n }\n text += decoder.decode();\n const value: unknown = JSON.parse(text);\n assertBoundedTaskJson(value, maximumBytes);\n return value;\n } finally {\n await reader.cancel();\n reader.releaseLock();\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { z } from \"zod\";\nimport {\n LearningCommandRequestSchema, LearningOperationResultSchema, LearningReadRequestSchema,\n TaskEvidenceInspectionResultSchema, sameLearningRef, type LearningRevisionRef,\n assertLearningRequestJson,\n learningResourceSchemas, type LearningCommand, type LearningOperationResult,\n type LearningResourceFor, type LearningResourceKind, type LearningResourcePage,\n type LearningResourceQuery, type TaskExampleSubmission, type TaskFeedbackSubmission,\n} from \"@openpond/evals/learning\";\nimport { assertBoundedTaskJson } from \"@openpond/evals/task-schema\";\n\nexport * from \"@openpond/evals/learning\";\nexport * from \"@openpond/evals/rewards\";\n\nexport interface OpenPondLearningClientOptions {\n apiKey: string;\n baseUrl: string;\n /** Local profile or hosted team scope. The server checks the credential's ownership. */\n scope: string;\n fetch?: typeof globalThis.fetch;\n}\nexport interface LearningRequestOptions { signal?: AbortSignal }\nexport const LearningBatchPublicationSchema = z.object({\n batchId: z.string().trim().min(1).max(500), modelProjectId: z.string().trim().min(1).max(500),\n}).strict();\nexport const LearningBatchPublicationResultSchema = z.object({\n batchId: z.string().min(1), projectId: z.string().min(1), tasksetId: z.string().min(1),\n releaseId: z.string().min(1), revision: z.number().int().positive(), contentHash: z.string().regex(/^[a-f0-9]{64}$/),\n}).strict();\nexport class OpenPondLearningError extends Error {\n constructor(readonly status: number, readonly code: string, message: string, readonly details: unknown) {\n super(message);\n this.name = \"OpenPondLearningError\";\n }\n}\n\n/** The same portable commands are sent to the local and hosted execution owner. */\nexport class OpenPondLearningClient {\n readonly #options: OpenPondLearningClientOptions;\n constructor(options: OpenPondLearningClientOptions) {\n if (!options.apiKey.trim() || !options.scope.trim()) throw new Error(\"Learning API key and scope are required.\");\n const url = new URL(options.baseUrl);\n if (![\"http:\", \"https:\"].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new Error(\"Learning base URL must be an HTTP(S) endpoint without credentials, query, or fragment.\");\n this.#options = { ...options, baseUrl: url.toString().replace(/\\/+$/, \"\") };\n }\n\n async command(command: LearningCommand, options: LearningRequestOptions = {}): Promise<LearningOperationResult> {\n assertLearningRequestJson(command);\n const request = LearningCommandRequestSchema.parse({ scope: this.#options.scope, command });\n const result = LearningOperationResultSchema.parse(await this.#request(\"commands\", request, options));\n if (result.operationId !== command.operationId) throw new OpenPondLearningError(502, \"operation_identity_mismatch\", \"Learning response did not match the submitted operation.\", null);\n return result;\n }\n\n submitExample(example: TaskExampleSubmission, options: LearningRequestOptions = {}) {\n return this.command({ action: \"submit_example\", operationId: example.idempotencyKey, example }, options);\n }\n\n submitFeedback(feedback: TaskFeedbackSubmission, options: LearningRequestOptions = {}) {\n return this.command({ action: \"submit_feedback\", operationId: feedback.idempotencyKey, feedback }, options);\n }\n\n async get<K extends LearningResourceKind>(kind: K, id: string, revision?: number, options: LearningRequestOptions = {}): Promise<LearningResourceFor<K>> {\n const request = LearningReadRequestSchema.parse({ action: \"get\", scope: this.#options.scope, kind, id, ...(revision === undefined ? {} : { revision }) });\n return learningResourceSchemas[kind].parse(await this.#request(\"read\", request, options)) as LearningResourceFor<K>;\n }\n\n async inspectEvidence(evidence: LearningRevisionRef, options: LearningRequestOptions = {}) {\n const request = LearningReadRequestSchema.parse({ action: \"inspect_evidence\", scope: this.#options.scope, evidence });\n const result = TaskEvidenceInspectionResultSchema.parse(await this.#request(\"read\", request, options));\n if (!sameLearningRef(result.evidence, evidence)) throw new OpenPondLearningError(502, \"evidence_identity_mismatch\", \"Inspection did not match the requested evidence release.\", null);\n return result;\n }\n\n async list<K extends LearningResourceKind>(kind: K, query: Partial<LearningResourceQuery> = {}, options: LearningRequestOptions = {}): Promise<LearningResourcePage<K>> {\n const request = LearningReadRequestSchema.parse({ action: \"list\", scope: this.#options.scope, kind, ...query });\n return z.object({ items: z.array(learningResourceSchemas[kind]).max(100), nextCursor: z.string().nullable() }).strict().parse(await this.#request(\"read\", request, options)) as LearningResourcePage<K>;\n }\n\n /** Hosted publication only: stores an immutable package and attaches it, without starting training. */\n async publishBatch(input: z.infer<typeof LearningBatchPublicationSchema>, options: LearningRequestOptions = {}) {\n const request = LearningBatchPublicationSchema.parse(input);\n const result = LearningBatchPublicationResultSchema.parse(await this.#request(\"publish-batch\", { ...request, scope: this.#options.scope }, options));\n if (result.batchId !== request.batchId) throw new OpenPondLearningError(502, \"batch_identity_mismatch\", \"Published batch response did not match the requested batch.\", null);\n return result;\n }\n\n async #request(endpoint: \"commands\" | \"read\" | \"publish-batch\", body: unknown, options: LearningRequestOptions): Promise<unknown> {\n assertBoundedTaskJson(body, 16_777_216);\n const response = await (this.#options.fetch ?? globalThis.fetch)(`${this.#options.baseUrl}/v1/learning/${endpoint}`, {\n method: \"POST\", headers: { Authorization: `Bearer ${this.#options.apiKey}`, \"Content-Type\": \"application/json\", Accept: \"application/json\", \"X-OpenPond-Team-Id\": this.#options.scope }, body: JSON.stringify(body), signal: options.signal,\n redirect: \"error\",\n });\n const payload = await readBoundedLearningResponse(response);\n if (!response.ok) {\n const error = z.object({ code: z.string().optional(), error: z.string().optional() }).passthrough().safeParse(payload);\n throw new OpenPondLearningError(response.status, error.success ? error.data.code ?? \"learning_request_failed\" : \"learning_request_failed\", error.success ? error.data.error ?? `Learning request failed (${response.status}).` : `Learning request failed (${response.status}).`, payload);\n }\n return payload;\n }\n}\n\nasync function readBoundedLearningResponse(response: Response): Promise<unknown> {\n const maximumBytes = 16_777_216;\n const reader = response.body?.getReader();\n if (!reader) throw new OpenPondLearningError(response.status, \"empty_response\", \"Learning response was empty.\", null);\n const decoder = new TextDecoder();\n let bytes = 0;\n let text = \"\";\n try {\n while (true) {\n const next = await reader.read();\n if (next.done) break;\n bytes += next.value.byteLength;\n if (bytes > maximumBytes) throw new OpenPondLearningError(response.status, \"response_too_large\", \"Learning response exceeded 16 MiB; request a smaller page.\", null);\n text += decoder.decode(next.value, { stream: true });\n }\n text += decoder.decode();\n const value: unknown = JSON.parse(text);\n assertBoundedTaskJson(value, maximumBytes);\n return value;\n } finally {\n await reader.cancel();\n reader.releaseLock();\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
// src/taskset-catalog.ts
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
var IdSchema = z.string().trim().min(1).max(500);
|
|
4
|
+
var HashSchema = z.string().regex(/^[a-f0-9]{64}$/);
|
|
5
|
+
var TasksetCatalogReleaseRefSchema = z.object({ id: IdSchema, revision: z.number().int().positive(), contentHash: HashSchema }).strict();
|
|
6
|
+
var HostedTasksetSummarySchema = z.object({
|
|
7
|
+
schemaVersion: z.literal("openpond.hostedTasksetSummary.v1"),
|
|
8
|
+
id: IdSchema,
|
|
9
|
+
teamId: IdSchema,
|
|
10
|
+
release: TasksetCatalogReleaseRefSchema,
|
|
11
|
+
name: z.string().min(1).max(500),
|
|
12
|
+
description: z.string().max(2e4),
|
|
13
|
+
taskCount: z.number().int().nonnegative(),
|
|
14
|
+
buildIntent: z.string().min(1).max(100),
|
|
15
|
+
methodHint: z.string().min(1).max(100).nullable(),
|
|
16
|
+
packageBytes: z.number().int().nonnegative().nullable(),
|
|
17
|
+
storedBytes: z.number().int().nonnegative().nullable(),
|
|
18
|
+
createdAt: z.string().datetime({ offset: true })
|
|
19
|
+
}).strict();
|
|
20
|
+
var TasksetCatalogQuerySchema = z.object({
|
|
21
|
+
afterId: IdSchema.optional(),
|
|
22
|
+
limit: z.number().int().min(1).max(100).default(30),
|
|
23
|
+
modelProjectId: IdSchema.optional()
|
|
24
|
+
}).strict();
|
|
25
|
+
var TasksetCatalogPageSchema = z.object({
|
|
26
|
+
items: z.array(HostedTasksetSummarySchema).max(100),
|
|
27
|
+
nextCursor: IdSchema.nullable()
|
|
28
|
+
}).strict();
|
|
29
|
+
var TasksetCatalogErrorSchema = z.object({
|
|
30
|
+
code: z.string().min(1),
|
|
31
|
+
message: z.string().min(1)
|
|
32
|
+
}).strict();
|
|
33
|
+
var OpenPondTasksetCatalogError = class extends Error {
|
|
34
|
+
constructor(status, code, message) {
|
|
35
|
+
super(message);
|
|
36
|
+
this.status = status;
|
|
37
|
+
this.code = code;
|
|
38
|
+
this.name = "OpenPondTasksetCatalogError";
|
|
39
|
+
}
|
|
40
|
+
status;
|
|
41
|
+
code;
|
|
42
|
+
};
|
|
43
|
+
var OpenPondTasksetCatalogClient = class {
|
|
44
|
+
#options;
|
|
45
|
+
constructor(options) {
|
|
46
|
+
if (!options.apiKey.trim() || !options.teamId.trim()) throw new Error("Taskset API key and workspace are required.");
|
|
47
|
+
const url = new URL(options.baseUrl);
|
|
48
|
+
if (!["http:", "https:"].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new Error("Taskset base URL must be an HTTP(S) endpoint without credentials, query, or fragment.");
|
|
49
|
+
this.#options = { ...options, baseUrl: url.toString().replace(/\/+$/, "") };
|
|
50
|
+
}
|
|
51
|
+
async list(query = {}, options = {}) {
|
|
52
|
+
const parsed = TasksetCatalogQuerySchema.parse(query);
|
|
53
|
+
const search = new URLSearchParams({ limit: String(parsed.limit) });
|
|
54
|
+
if (parsed.afterId) search.set("afterId", parsed.afterId);
|
|
55
|
+
if (parsed.modelProjectId) search.set("modelProjectId", parsed.modelProjectId);
|
|
56
|
+
const page = TasksetCatalogPageSchema.parse(await this.#request(`?${search}`, options.signal));
|
|
57
|
+
if (page.items.length > parsed.limit || page.items.some((item) => item.teamId !== this.#options.teamId)) throw new OpenPondTasksetCatalogError(502, "catalog_scope_mismatch", "Taskset inventory did not match the requested workspace or page size.");
|
|
58
|
+
return page;
|
|
59
|
+
}
|
|
60
|
+
async get(id, options = {}) {
|
|
61
|
+
const parsed = IdSchema.parse(id);
|
|
62
|
+
const item = HostedTasksetSummarySchema.parse(await this.#request(`/${encodeURIComponent(parsed)}`, options.signal));
|
|
63
|
+
if (item.id !== parsed || item.teamId !== this.#options.teamId) throw new OpenPondTasksetCatalogError(502, "catalog_identity_mismatch", "Taskset metadata did not match the requested identity.");
|
|
64
|
+
return item;
|
|
65
|
+
}
|
|
66
|
+
/** Resolve a saved portable reference without scanning inventory pages. */
|
|
67
|
+
async resolve(release, options = {}) {
|
|
68
|
+
const parsed = TasksetCatalogReleaseRefSchema.parse(release);
|
|
69
|
+
const item = HostedTasksetSummarySchema.parse(await this.#request(`/releases/${encodeURIComponent(parsed.id)}/${parsed.revision}/${parsed.contentHash}`, options.signal));
|
|
70
|
+
if (item.teamId !== this.#options.teamId || item.release.id !== parsed.id || item.release.revision !== parsed.revision || item.release.contentHash !== parsed.contentHash) throw new OpenPondTasksetCatalogError(502, "catalog_release_mismatch", "Taskset metadata did not match the requested immutable release.");
|
|
71
|
+
return item;
|
|
72
|
+
}
|
|
73
|
+
async #request(path, signal) {
|
|
74
|
+
const response = await (this.#options.fetch ?? globalThis.fetch)(`${this.#options.baseUrl}/v1/taskset-catalog${path}`, {
|
|
75
|
+
headers: { Authorization: `Bearer ${this.#options.apiKey}`, "X-OpenPond-Team-Id": this.#options.teamId, Accept: "application/json" },
|
|
76
|
+
signal,
|
|
77
|
+
redirect: "error"
|
|
78
|
+
});
|
|
79
|
+
const reader = response.body?.getReader();
|
|
80
|
+
if (!reader) throw new OpenPondTasksetCatalogError(response.status, "empty_response", "Taskset catalog response was empty.");
|
|
81
|
+
const decoder = new TextDecoder();
|
|
82
|
+
let bytes = 0;
|
|
83
|
+
let text = "";
|
|
84
|
+
try {
|
|
85
|
+
while (true) {
|
|
86
|
+
const chunk = await reader.read();
|
|
87
|
+
if (chunk.done) break;
|
|
88
|
+
bytes += chunk.value.byteLength;
|
|
89
|
+
if (bytes > 4194304) throw new OpenPondTasksetCatalogError(response.status, "response_too_large", "Taskset catalog response exceeded 4 MiB.");
|
|
90
|
+
text += decoder.decode(chunk.value, { stream: true });
|
|
91
|
+
}
|
|
92
|
+
text += decoder.decode();
|
|
93
|
+
} finally {
|
|
94
|
+
await reader.cancel();
|
|
95
|
+
reader.releaseLock();
|
|
96
|
+
}
|
|
97
|
+
const payload = JSON.parse(text);
|
|
98
|
+
if (!response.ok) {
|
|
99
|
+
const error = TasksetCatalogErrorSchema.safeParse(payload);
|
|
100
|
+
throw new OpenPondTasksetCatalogError(response.status, error.success ? error.data.code : "invalid_error_response", error.success ? error.data.message : `Taskset catalog request failed (${response.status}).`);
|
|
101
|
+
}
|
|
102
|
+
return payload;
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
export {
|
|
106
|
+
HostedTasksetSummarySchema,
|
|
107
|
+
OpenPondTasksetCatalogClient,
|
|
108
|
+
OpenPondTasksetCatalogError,
|
|
109
|
+
TasksetCatalogErrorSchema,
|
|
110
|
+
TasksetCatalogPageSchema,
|
|
111
|
+
TasksetCatalogQuerySchema,
|
|
112
|
+
TasksetCatalogReleaseRefSchema
|
|
113
|
+
};
|
|
114
|
+
//# sourceMappingURL=taskset-catalog.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/taskset-catalog.ts"],
|
|
4
|
+
"sourcesContent": ["import { z } from \"zod\";\n\nconst IdSchema = z.string().trim().min(1).max(500);\nconst HashSchema = z.string().regex(/^[a-f0-9]{64}$/);\nexport const TasksetCatalogReleaseRefSchema = z.object({ id: IdSchema, revision: z.number().int().positive(), contentHash: HashSchema }).strict();\n\n/** Inventory metadata only. Task rows, evaluator source, and object locations\n * are resolved separately by an authorized package operation. */\nexport const HostedTasksetSummarySchema = z.object({\n schemaVersion: z.literal(\"openpond.hostedTasksetSummary.v1\"),\n id: IdSchema,\n teamId: IdSchema,\n release: TasksetCatalogReleaseRefSchema,\n name: z.string().min(1).max(500),\n description: z.string().max(20_000),\n taskCount: z.number().int().nonnegative(),\n buildIntent: z.string().min(1).max(100),\n methodHint: z.string().min(1).max(100).nullable(),\n packageBytes: z.number().int().nonnegative().nullable(),\n storedBytes: z.number().int().nonnegative().nullable(),\n createdAt: z.string().datetime({ offset: true }),\n}).strict();\nexport const TasksetCatalogQuerySchema = z.object({\n afterId: IdSchema.optional(),\n limit: z.number().int().min(1).max(100).default(30),\n modelProjectId: IdSchema.optional(),\n}).strict();\nexport const TasksetCatalogPageSchema = z.object({\n items: z.array(HostedTasksetSummarySchema).max(100),\n nextCursor: IdSchema.nullable(),\n}).strict();\nexport const TasksetCatalogErrorSchema = z.object({\n code: z.string().min(1),\n message: z.string().min(1),\n}).strict();\nexport type HostedTasksetSummary = z.infer<typeof HostedTasksetSummarySchema>;\nexport type TasksetCatalogPage = z.infer<typeof TasksetCatalogPageSchema>;\n\nexport class OpenPondTasksetCatalogError extends Error {\n constructor(readonly status: number, readonly code: string, message: string) {\n super(message);\n this.name = \"OpenPondTasksetCatalogError\";\n }\n}\n\nexport interface TasksetCatalogClientOptions {\n baseUrl: string;\n apiKey: string;\n teamId: string;\n fetch?: typeof globalThis.fetch;\n}\n\nexport class OpenPondTasksetCatalogClient {\n readonly #options: TasksetCatalogClientOptions;\n constructor(options: TasksetCatalogClientOptions) {\n if (!options.apiKey.trim() || !options.teamId.trim()) throw new Error(\"Taskset API key and workspace are required.\");\n const url = new URL(options.baseUrl);\n if (![\"http:\", \"https:\"].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new Error(\"Taskset base URL must be an HTTP(S) endpoint without credentials, query, or fragment.\");\n this.#options = { ...options, baseUrl: url.toString().replace(/\\/+$/, \"\") };\n }\n\n async list(query: z.input<typeof TasksetCatalogQuerySchema> = {}, options: { signal?: AbortSignal } = {}): Promise<TasksetCatalogPage> {\n const parsed = TasksetCatalogQuerySchema.parse(query);\n const search = new URLSearchParams({ limit: String(parsed.limit) });\n if (parsed.afterId) search.set(\"afterId\", parsed.afterId);\n if (parsed.modelProjectId) search.set(\"modelProjectId\", parsed.modelProjectId);\n const page = TasksetCatalogPageSchema.parse(await this.#request(`?${search}`, options.signal));\n if (page.items.length > parsed.limit || page.items.some((item) => item.teamId !== this.#options.teamId)) throw new OpenPondTasksetCatalogError(502, \"catalog_scope_mismatch\", \"Taskset inventory did not match the requested workspace or page size.\");\n return page;\n }\n\n async get(id: string, options: { signal?: AbortSignal } = {}): Promise<HostedTasksetSummary> {\n const parsed = IdSchema.parse(id);\n const item = HostedTasksetSummarySchema.parse(await this.#request(`/${encodeURIComponent(parsed)}`, options.signal));\n if (item.id !== parsed || item.teamId !== this.#options.teamId) throw new OpenPondTasksetCatalogError(502, \"catalog_identity_mismatch\", \"Taskset metadata did not match the requested identity.\");\n return item;\n }\n\n /** Resolve a saved portable reference without scanning inventory pages. */\n async resolve(release: z.infer<typeof TasksetCatalogReleaseRefSchema>, options: { signal?: AbortSignal } = {}): Promise<HostedTasksetSummary> {\n const parsed = TasksetCatalogReleaseRefSchema.parse(release);\n const item = HostedTasksetSummarySchema.parse(await this.#request(`/releases/${encodeURIComponent(parsed.id)}/${parsed.revision}/${parsed.contentHash}`, options.signal));\n if (item.teamId !== this.#options.teamId || item.release.id !== parsed.id || item.release.revision !== parsed.revision || item.release.contentHash !== parsed.contentHash) throw new OpenPondTasksetCatalogError(502, \"catalog_release_mismatch\", \"Taskset metadata did not match the requested immutable release.\");\n return item;\n }\n\n async #request(path: string, signal?: AbortSignal): Promise<unknown> {\n const response = await (this.#options.fetch ?? globalThis.fetch)(`${this.#options.baseUrl}/v1/taskset-catalog${path}`, {\n headers: { Authorization: `Bearer ${this.#options.apiKey}`, \"X-OpenPond-Team-Id\": this.#options.teamId, Accept: \"application/json\" },\n signal, redirect: \"error\",\n });\n const reader = response.body?.getReader();\n if (!reader) throw new OpenPondTasksetCatalogError(response.status, \"empty_response\", \"Taskset catalog response was empty.\");\n const decoder = new TextDecoder();\n let bytes = 0;\n let text = \"\";\n try {\n while (true) {\n const chunk = await reader.read();\n if (chunk.done) break;\n bytes += chunk.value.byteLength;\n if (bytes > 4_194_304) throw new OpenPondTasksetCatalogError(response.status, \"response_too_large\", \"Taskset catalog response exceeded 4 MiB.\");\n text += decoder.decode(chunk.value, { stream: true });\n }\n text += decoder.decode();\n } finally { await reader.cancel(); reader.releaseLock(); }\n const payload: unknown = JSON.parse(text);\n if (!response.ok) {\n const error = TasksetCatalogErrorSchema.safeParse(payload);\n throw new OpenPondTasksetCatalogError(response.status, error.success ? error.data.code : \"invalid_error_response\", error.success ? error.data.message : `Taskset catalog request failed (${response.status}).`);\n }\n return payload;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { type LearningCommand, type LearningOperationResult, type LearningResourceFor, type LearningResourceKind, type LearningResourcePage, type LearningResourceQuery, type TaskExampleSubmission, type TaskFeedbackSubmission } from "@openpond/evals/learning";
|
|
2
|
+
import { type LearningRevisionRef, type LearningCommand, type LearningOperationResult, type LearningResourceFor, type LearningResourceKind, type LearningResourcePage, type LearningResourceQuery, type TaskExampleSubmission, type TaskFeedbackSubmission } from "@openpond/evals/learning";
|
|
3
3
|
export * from "@openpond/evals/learning";
|
|
4
4
|
export * from "@openpond/evals/rewards";
|
|
5
5
|
export interface OpenPondLearningClientOptions {
|
|
@@ -38,6 +38,28 @@ export declare class OpenPondLearningClient {
|
|
|
38
38
|
submitExample(example: TaskExampleSubmission, options?: LearningRequestOptions): Promise<LearningOperationResult>;
|
|
39
39
|
submitFeedback(feedback: TaskFeedbackSubmission, options?: LearningRequestOptions): Promise<LearningOperationResult>;
|
|
40
40
|
get<K extends LearningResourceKind>(kind: K, id: string, revision?: number, options?: LearningRequestOptions): Promise<LearningResourceFor<K>>;
|
|
41
|
+
inspectEvidence(evidence: LearningRevisionRef, options?: LearningRequestOptions): Promise<{
|
|
42
|
+
evidence: {
|
|
43
|
+
id: string;
|
|
44
|
+
contentHash: string;
|
|
45
|
+
revision: number;
|
|
46
|
+
};
|
|
47
|
+
definition: {
|
|
48
|
+
id: string;
|
|
49
|
+
contentHash: string;
|
|
50
|
+
revision: number;
|
|
51
|
+
};
|
|
52
|
+
inspection: {
|
|
53
|
+
evidenceValidity: "valid" | "invalid";
|
|
54
|
+
taskReady: boolean;
|
|
55
|
+
observedOutputValid: boolean | null;
|
|
56
|
+
issues: {
|
|
57
|
+
path: string;
|
|
58
|
+
code: string;
|
|
59
|
+
message: string;
|
|
60
|
+
}[];
|
|
61
|
+
};
|
|
62
|
+
}>;
|
|
41
63
|
list<K extends LearningResourceKind>(kind: K, query?: Partial<LearningResourceQuery>, options?: LearningRequestOptions): Promise<LearningResourcePage<K>>;
|
|
42
64
|
/** Hosted publication only: stores an immutable package and attaches it, without starting training. */
|
|
43
65
|
publishBatch(input: z.infer<typeof LearningBatchPublicationSchema>, options?: LearningRequestOptions): Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"learning.d.ts","sourceRoot":"","sources":["../../../../../src/learning.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"learning.d.ts","sourceRoot":"","sources":["../../../../../src/learning.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEgD,KAAK,mBAAmB,EAEpD,KAAK,eAAe,EAAE,KAAK,uBAAuB,EAC3E,KAAK,mBAAmB,EAAE,KAAK,oBAAoB,EAAE,KAAK,oBAAoB,EAC9E,KAAK,qBAAqB,EAAE,KAAK,qBAAqB,EAAE,KAAK,sBAAsB,EACpF,MAAM,0BAA0B,CAAC;AAGlC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AAExC,MAAM,WAAW,6BAA6B;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,wFAAwF;IACxF,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AACD,MAAM,WAAW,sBAAsB;IAAG,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE;AAChE,eAAO,MAAM,8BAA8B;;;kBAEhC,CAAC;AACZ,eAAO,MAAM,oCAAoC;;;;;;;kBAGtC,CAAC;AACZ,qBAAa,qBAAsB,SAAQ,KAAK;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAmB,QAAQ,CAAC,OAAO,EAAE,OAAO;gBAAjF,MAAM,EAAE,MAAM,EAAW,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAW,OAAO,EAAE,OAAO;CAIvG;AAED,mFAAmF;AACnF,qBAAa,sBAAsB;;gBAErB,OAAO,EAAE,6BAA6B;IAO5C,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAQ/G,aAAa,CAAC,OAAO,EAAE,qBAAqB,EAAE,OAAO,GAAE,sBAA2B;IAIlF,cAAc,CAAC,QAAQ,EAAE,sBAAsB,EAAE,OAAO,GAAE,sBAA2B;IAI/E,GAAG,CAAC,CAAC,SAAS,oBAAoB,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAKlJ,eAAe,CAAC,QAAQ,EAAE,mBAAmB,EAAE,OAAO,GAAE,sBAA2B;;;;;;;;;;;;;;;;;;;;;;IAOnF,IAAI,CAAC,CAAC,SAAS,oBAAoB,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,GAAE,OAAO,CAAC,qBAAqB,CAAM,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAKvK,uGAAuG;IACjG,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,EAAE,OAAO,GAAE,sBAA2B;;;;;;;;CAoB/G"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const TasksetCatalogReleaseRefSchema: z.ZodObject<{
|
|
3
|
+
id: z.ZodString;
|
|
4
|
+
revision: z.ZodNumber;
|
|
5
|
+
contentHash: z.ZodString;
|
|
6
|
+
}, z.core.$strict>;
|
|
7
|
+
/** Inventory metadata only. Task rows, evaluator source, and object locations
|
|
8
|
+
* are resolved separately by an authorized package operation. */
|
|
9
|
+
export declare const HostedTasksetSummarySchema: z.ZodObject<{
|
|
10
|
+
schemaVersion: z.ZodLiteral<"openpond.hostedTasksetSummary.v1">;
|
|
11
|
+
id: z.ZodString;
|
|
12
|
+
teamId: z.ZodString;
|
|
13
|
+
release: z.ZodObject<{
|
|
14
|
+
id: z.ZodString;
|
|
15
|
+
revision: z.ZodNumber;
|
|
16
|
+
contentHash: z.ZodString;
|
|
17
|
+
}, z.core.$strict>;
|
|
18
|
+
name: z.ZodString;
|
|
19
|
+
description: z.ZodString;
|
|
20
|
+
taskCount: z.ZodNumber;
|
|
21
|
+
buildIntent: z.ZodString;
|
|
22
|
+
methodHint: z.ZodNullable<z.ZodString>;
|
|
23
|
+
packageBytes: z.ZodNullable<z.ZodNumber>;
|
|
24
|
+
storedBytes: z.ZodNullable<z.ZodNumber>;
|
|
25
|
+
createdAt: z.ZodString;
|
|
26
|
+
}, z.core.$strict>;
|
|
27
|
+
export declare const TasksetCatalogQuerySchema: z.ZodObject<{
|
|
28
|
+
afterId: z.ZodOptional<z.ZodString>;
|
|
29
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
30
|
+
modelProjectId: z.ZodOptional<z.ZodString>;
|
|
31
|
+
}, z.core.$strict>;
|
|
32
|
+
export declare const TasksetCatalogPageSchema: z.ZodObject<{
|
|
33
|
+
items: z.ZodArray<z.ZodObject<{
|
|
34
|
+
schemaVersion: z.ZodLiteral<"openpond.hostedTasksetSummary.v1">;
|
|
35
|
+
id: z.ZodString;
|
|
36
|
+
teamId: z.ZodString;
|
|
37
|
+
release: z.ZodObject<{
|
|
38
|
+
id: z.ZodString;
|
|
39
|
+
revision: z.ZodNumber;
|
|
40
|
+
contentHash: z.ZodString;
|
|
41
|
+
}, z.core.$strict>;
|
|
42
|
+
name: z.ZodString;
|
|
43
|
+
description: z.ZodString;
|
|
44
|
+
taskCount: z.ZodNumber;
|
|
45
|
+
buildIntent: z.ZodString;
|
|
46
|
+
methodHint: z.ZodNullable<z.ZodString>;
|
|
47
|
+
packageBytes: z.ZodNullable<z.ZodNumber>;
|
|
48
|
+
storedBytes: z.ZodNullable<z.ZodNumber>;
|
|
49
|
+
createdAt: z.ZodString;
|
|
50
|
+
}, z.core.$strict>>;
|
|
51
|
+
nextCursor: z.ZodNullable<z.ZodString>;
|
|
52
|
+
}, z.core.$strict>;
|
|
53
|
+
export declare const TasksetCatalogErrorSchema: z.ZodObject<{
|
|
54
|
+
code: z.ZodString;
|
|
55
|
+
message: z.ZodString;
|
|
56
|
+
}, z.core.$strict>;
|
|
57
|
+
export type HostedTasksetSummary = z.infer<typeof HostedTasksetSummarySchema>;
|
|
58
|
+
export type TasksetCatalogPage = z.infer<typeof TasksetCatalogPageSchema>;
|
|
59
|
+
export declare class OpenPondTasksetCatalogError extends Error {
|
|
60
|
+
readonly status: number;
|
|
61
|
+
readonly code: string;
|
|
62
|
+
constructor(status: number, code: string, message: string);
|
|
63
|
+
}
|
|
64
|
+
export interface TasksetCatalogClientOptions {
|
|
65
|
+
baseUrl: string;
|
|
66
|
+
apiKey: string;
|
|
67
|
+
teamId: string;
|
|
68
|
+
fetch?: typeof globalThis.fetch;
|
|
69
|
+
}
|
|
70
|
+
export declare class OpenPondTasksetCatalogClient {
|
|
71
|
+
#private;
|
|
72
|
+
constructor(options: TasksetCatalogClientOptions);
|
|
73
|
+
list(query?: z.input<typeof TasksetCatalogQuerySchema>, options?: {
|
|
74
|
+
signal?: AbortSignal;
|
|
75
|
+
}): Promise<TasksetCatalogPage>;
|
|
76
|
+
get(id: string, options?: {
|
|
77
|
+
signal?: AbortSignal;
|
|
78
|
+
}): Promise<HostedTasksetSummary>;
|
|
79
|
+
/** Resolve a saved portable reference without scanning inventory pages. */
|
|
80
|
+
resolve(release: z.infer<typeof TasksetCatalogReleaseRefSchema>, options?: {
|
|
81
|
+
signal?: AbortSignal;
|
|
82
|
+
}): Promise<HostedTasksetSummary>;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=taskset-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taskset-catalog.d.ts","sourceRoot":"","sources":["../../../../../src/taskset-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,8BAA8B;;;;kBAAsG,CAAC;AAElJ;iEACiE;AACjE,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;kBAa5B,CAAC;AACZ,eAAO,MAAM,yBAAyB;;;;kBAI3B,CAAC;AACZ,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;kBAG1B,CAAC;AACZ,eAAO,MAAM,yBAAyB;;;kBAG3B,CAAC;AACZ,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,qBAAa,2BAA4B,SAAQ,KAAK;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAArC,MAAM,EAAE,MAAM,EAAW,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI5E;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAED,qBAAa,4BAA4B;;gBAE3B,OAAO,EAAE,2BAA2B;IAO1C,IAAI,CAAC,KAAK,GAAE,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAM,EAAE,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAUhI,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAO5F,2EAA2E;IACrE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,EAAE,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC;CAkC9I"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "openpond-sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "Server-side TypeScript SDK for OpenPond sandboxes and agentic work",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -13,9 +13,14 @@
|
|
|
13
13
|
"TRAINING_PROTOCOL.md",
|
|
14
14
|
"LICENSE",
|
|
15
15
|
"examples",
|
|
16
|
-
"LEARNING.md"
|
|
16
|
+
"LEARNING.md",
|
|
17
|
+
"TASKSETS.md"
|
|
17
18
|
],
|
|
18
19
|
"exports": {
|
|
20
|
+
"./taskset-catalog": {
|
|
21
|
+
"types": "./dist/types/packages/sdk/src/taskset-catalog.d.ts",
|
|
22
|
+
"import": "./dist/taskset-catalog.js"
|
|
23
|
+
},
|
|
19
24
|
"./learning": {
|
|
20
25
|
"types": "./dist/types/packages/sdk/src/learning.d.ts",
|
|
21
26
|
"import": "./dist/learning.js"
|
|
@@ -97,7 +102,7 @@
|
|
|
97
102
|
"vitest": "4.1.10"
|
|
98
103
|
},
|
|
99
104
|
"dependencies": {
|
|
100
|
-
"@openpond/evals": "^0.7.
|
|
105
|
+
"@openpond/evals": "^0.7.1",
|
|
101
106
|
"@openpond/harness": "^0.2.5",
|
|
102
107
|
"esbuild": "0.28.1",
|
|
103
108
|
"zod": "^4.1.13"
|