openpond-sdk 0.1.2 → 0.1.3

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 ADDED
@@ -0,0 +1,31 @@
1
+ # Published Taskset inventory
2
+
3
+ `openpond-sdk/taskset-catalog` provides authenticated, paginated metadata reads
4
+ for the selected hosted workspace. The service applies workspace access and
5
+ optional Model Project attachment filtering before returning records.
6
+
7
+ ```ts
8
+ import { OpenPondTasksetCatalogClient } from "openpond-sdk/taskset-catalog";
9
+
10
+ const tasksets = new OpenPondTasksetCatalogClient({
11
+ baseUrl: "https://api.openpond.ai",
12
+ apiKey,
13
+ teamId,
14
+ });
15
+ const page = await tasksets.list({ limit: 30, modelProjectId });
16
+ const item = await tasksets.get(page.items[0].id);
17
+ const selected = await tasksets.resolve(item.release);
18
+ const next = page.nextCursor
19
+ ? await tasksets.list({ limit: 30, modelProjectId, afterId: page.nextCursor })
20
+ : null;
21
+ ```
22
+
23
+ The item's `id` is the hosted inventory identity. Its `release` pins the portable
24
+ ID, revision and content hash used in model configuration. Metadata reads contain
25
+ no task rows, private verifier source or object-store locations. Publication and
26
+ package byte counts do not establish grading or training readiness.
27
+
28
+ The client rejects responses for a different workspace or requested resource,
29
+ limits catalog responses to 4 MiB, supports abort signals, and does not follow
30
+ redirects with credentials. `OpenPondTasksetCatalogError` preserves HTTP status and
31
+ the service's error code.
@@ -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
+ }
@@ -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.2",
3
+ "version": "0.1.3",
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"