openpond-sdk 0.9.9 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -17
- package/dist/{chunk-4HZORGK3.js → chunk-2ZJRG3KL.js} +13 -4
- package/dist/chunk-2ZJRG3KL.js.map +7 -0
- package/dist/{chunk-YYJ4T4U4.js → chunk-7B44TQZD.js} +2 -2
- package/dist/{chunk-KYCQ7LZ4.js → chunk-DSGGM2ME.js} +2 -2
- package/dist/chunk-DSGGM2ME.js.map +7 -0
- package/dist/{chunk-3HV3G6DG.js → chunk-I2YM3UY4.js} +2 -2
- package/dist/{chunk-6D4JIOOC.js → chunk-I3TQTXKB.js} +2 -2
- package/dist/{chunk-WOPM32SE.js → chunk-JA3KFK3U.js} +7 -1
- package/dist/chunk-JA3KFK3U.js.map +7 -0
- package/dist/{chunk-XMKEFQ62.js → chunk-PJ2VLNJF.js} +20 -2
- package/dist/chunk-PJ2VLNJF.js.map +7 -0
- package/dist/chunk-PRRUBH2B.js +314 -0
- package/dist/chunk-PRRUBH2B.js.map +7 -0
- package/dist/{chunk-BGXWHDYM.js → chunk-W5TXWVFS.js} +9 -2
- package/dist/chunk-W5TXWVFS.js.map +7 -0
- package/dist/dataset-workspaces.js +5 -5
- package/dist/experiments.js +42 -61
- package/dist/experiments.js.map +4 -4
- package/dist/index.js +4 -4
- package/dist/model-starter-attempts.js +1 -1
- package/dist/model-starter-catalog.js +2 -2
- package/dist/model-starters.js +8 -4
- package/dist/model-taskset-runs.js +2 -2
- package/dist/taskset-drafts.js +2 -2
- package/dist/taskset-packages.js +7 -5
- package/dist/taskset-packages.js.map +1 -1
- package/dist/training-bundle.js +2 -2
- package/dist/training-projects.js +2 -0
- package/dist/training-projects.js.map +2 -2
- package/dist/types/packages/sdk/src/dataset-population.d.ts +1 -0
- package/dist/types/packages/sdk/src/dataset-population.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/experiment-client.d.ts +904 -502
- package/dist/types/packages/sdk/src/experiment-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/experiment-contracts.d.ts +51 -2
- package/dist/types/packages/sdk/src/experiment-contracts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/experiment-execution-selection.d.ts +58 -0
- package/dist/types/packages/sdk/src/experiment-execution-selection.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/experiment-harness-catalog.d.ts +24 -0
- package/dist/types/packages/sdk/src/experiment-harness-catalog.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/experiment-run-contracts.d.ts +121 -0
- package/dist/types/packages/sdk/src/experiment-run-contracts.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/experiment-run-details.d.ts +724 -0
- package/dist/types/packages/sdk/src/experiment-run-details.d.ts.map +1 -0
- package/dist/types/packages/sdk/src/experiment-scoring-contracts.d.ts +2 -0
- package/dist/types/packages/sdk/src/experiment-scoring-contracts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/experiments.d.ts +4 -1
- package/dist/types/packages/sdk/src/experiments.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-starter-attempts.d.ts +156 -0
- package/dist/types/packages/sdk/src/model-starter-attempts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-starter-execution.d.ts +1 -0
- package/dist/types/packages/sdk/src/model-starter-execution.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-starters.d.ts +1 -0
- package/dist/types/packages/sdk/src/model-starters.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-taskset-runs-contracts.d.ts +44 -0
- package/dist/types/packages/sdk/src/model-taskset-runs-contracts.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/model-taskset-runs.d.ts +44 -0
- package/dist/types/packages/sdk/src/model-taskset-runs.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/taskset-package-client.d.ts +1468 -0
- package/dist/types/packages/sdk/src/taskset-package-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-project-client.d.ts +52 -0
- package/dist/types/packages/sdk/src/training-project-client.d.ts.map +1 -1
- package/dist/types/packages/sdk/src/training-project-contracts.d.ts +65 -0
- package/dist/types/packages/sdk/src/training-project-contracts.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/chunk-4HZORGK3.js.map +0 -7
- package/dist/chunk-4JRSH2TT.js +0 -256
- package/dist/chunk-4JRSH2TT.js.map +0 -7
- package/dist/chunk-BGXWHDYM.js.map +0 -7
- package/dist/chunk-KYCQ7LZ4.js.map +0 -7
- package/dist/chunk-WOPM32SE.js.map +0 -7
- package/dist/chunk-XMKEFQ62.js.map +0 -7
- package/dist/types/packages/sdk/src/experiment-history.d.ts +0 -266
- package/dist/types/packages/sdk/src/experiment-history.d.ts.map +0 -1
- /package/dist/{chunk-YYJ4T4U4.js.map → chunk-7B44TQZD.js.map} +0 -0
- /package/dist/{chunk-3HV3G6DG.js.map → chunk-I2YM3UY4.js.map} +0 -0
- /package/dist/{chunk-6D4JIOOC.js.map → chunk-I3TQTXKB.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/training-project-contracts.ts", "../src/training-project-client.ts"],
|
|
4
|
-
"sourcesContent": ["import { ProfileEvaluationRunSourceSchema } from \"@openpond/evals\";\nimport { z } from \"zod\";\nimport { ImmutableReleaseRefSchema, contentHash } from \"@openpond/harness\";\n\nconst Id = z.string().trim().min(1).max(240);\nconst Revision = z.number().int().positive();\nexport const TrainingResourceKindSchema = z.enum([\"dataset\", \"evaluator\", \"model\", \"training_configuration\", \"training_run\", \"harness\", \"environment\", \"experiment\", \"learning_policy\", \"deployment\"]);\nexport const TrainingResourceLinkSchema = z.object({\n kind: TrainingResourceKindSchema, resourceId: Id, release: ImmutableReleaseRefSchema.nullable(),\n role: z.enum([\"training\", \"validation\", \"holdout\", \"target\", \"reward\", \"evaluation\", \"serving\", \"source\"]),\n}).strict();\nexport const TrainingTargetSchema = z.discriminatedUnion(\"kind\", [\n z.object({ kind: z.literal(\"model\"), providerId: Id, modelId: Id, artifact: ImmutableReleaseRefSchema.nullable(),\n messages: z.array(z.object({ role: z.enum([\"system\", \"user\", \"assistant\"]), content: z.string().max(100_000) }).strict()).max(100) }).strict(),\n z.object({ kind: z.literal(\"harness\"), profileRepositoryId: Id, source: ProfileEvaluationRunSourceSchema }).strict(),\n z.object({ kind: z.literal(\"suite\"), profileRepositoryId: Id, suiteId: Id, sources: z.array(ProfileEvaluationRunSourceSchema).min(1).max(1_000) }).strict().superRefine((value, ctx) => {\n const first = value.sources[0]!;\n const identities = new Set<string>();\n for (const [index, source] of value.sources.entries()) {\n if (identities.has(source.definitionId)) ctx.addIssue({ code: \"custom\", path: [\"sources\", index], message: \"Suite definitions must be unique.\" });\n identities.add(source.definitionId);\n if (source.profileId !== first.profileId || source.sourceRevision !== first.sourceRevision || source.catalogHash !== first.catalogHash || contentHash(source.harnessRelease) !== contentHash(first.harnessRelease))\n ctx.addIssue({ code: \"custom\", path: [\"sources\", index], message: \"Suite checks must belong to the same pinned Profile source and Harness release.\" });\n }\n }),\n]);\nexport const TrainingProjectContentSchema = z.object({\n name: z.string().trim().min(1).max(200), description: z.string().max(10_000),\n targets: z.array(z.object({ id: Id, name: z.string().trim().min(1).max(200), target: TrainingTargetSchema }).strict()).max(100),\n defaultTargetId: Id.nullable(), resources: z.array(TrainingResourceLinkSchema).max(1_000),\n}).strict().superRefine((value, ctx) => {\n if (new Set(value.targets.map(t => t.id)).size !== value.targets.length) ctx.addIssue({ code: \"custom\", path: [\"targets\"], message: \"Target identities must be unique.\" });\n if (value.defaultTargetId && !value.targets.some(t => t.id === value.defaultTargetId)) ctx.addIssue({ code: \"custom\", path: [\"defaultTargetId\"], message: \"Default target must belong to this Project.\" });\n if (new Set(value.resources.map(r => contentHash(r))).size !== value.resources.length) ctx.addIssue({ code: \"custom\", path: [\"resources\"], message: \"Resource links must be unique.\" });\n});\nexport const TrainingProjectSchema = z.object({\n schemaVersion: z.literal(\"openpond.trainingProject.v1\"), id: Id, teamId: Id, creatorUserId: Id,\n ownerScope: z.enum([\"workspace\", \"personal\"]).optional(),\n revision: Revision, content: TrainingProjectContentSchema, archived: z.boolean(),\n createdAt: z.string().datetime(), updatedAt: z.string().datetime(),\n}).strict();\nexport const TrainingProjectWriteSchema = z.object({\n operationId: Id, id: Id, expectedRevision: z.number().int().nonnegative(), content: TrainingProjectContentSchema,\n ownerScope: z.enum([\"workspace\", \"personal\"]).optional(),\n}).strict();\nexport const TrainingProjectArchiveSchema = z.object({ operationId: Id, expectedRevision: Revision, archived: z.boolean() }).strict();\nexport const TrainingProjectListSchema = z.object({ teamId: Id, projects: z.array(TrainingProjectSchema).max(100), nextCursor: Id.nullable() }).strict();\nexport const TrainingOperationReadinessSchema = z.object({\n operation: z.enum([\"evaluate\", \"train\", \"enable_learning\", \"accept_candidate\", \"serve\"]),\n support: z.enum([\"supported\", \"unsupported\"]), state: z.enum([\"ready\", \"needs_setup\", \"blocked\"]),\n reasons: z.array(z.object({ code: Id, message: z.string().min(1).max(2_000), field: z.string().nullable(),\n action: z.enum([\"choose_target\", \"choose_data\", \"choose_evaluator\", \"configure_runtime\", \"request_access\", \"configure_budget\", \"wait\", \"review_evidence\"]).nullable() }).strict()).max(100),\n}).strict().superRefine((value, ctx) => {\n if (value.state === \"ready\" && (value.support !== \"supported\" || value.reasons.length)) ctx.addIssue({ code: \"custom\", message: \"Ready operations must be supported with no blockers.\" });\n if (value.state !== \"ready\" && !value.reasons.length) ctx.addIssue({ code: \"custom\", message: \"Unavailable operations must explain the next step.\" });\n});\nexport type TrainingProject = z.infer<typeof TrainingProjectSchema>;\nexport type TrainingProjectContent = z.infer<typeof TrainingProjectContentSchema>;\nexport type TrainingProjectWrite = z.infer<typeof TrainingProjectWriteSchema>;\nexport type TrainingResourceLink = z.infer<typeof TrainingResourceLinkSchema>;\nexport type TrainingTarget = z.infer<typeof TrainingTargetSchema>;\n", "import { contentHash } from \"@openpond/harness\";\nimport { TrainingProjectSchema, TrainingProjectWriteSchema, TrainingProjectArchiveSchema, TrainingProjectListSchema, type TrainingProjectWrite } from \"./training-project-contracts.js\";\n\nexport class OpenPondTrainingProjectClient {\n private readonly baseUrl: string;\n constructor(private readonly options: { baseUrl: string; apiKey: string; teamId: string; fetch?: typeof fetch }) {\n const url = new URL(options.baseUrl);\n if (![\"http:\", \"https:\"].includes(url.protocol) || url.username || url.password || url.search || url.hash || !options.apiKey.trim() || !options.teamId.trim()) throw new Error(\"A clean API origin and workspace credentials are required.\");\n this.baseUrl = url.toString().replace(/\\/+$/, \"\");\n }\n async list(options: { cursor?: string; signal?: AbortSignal } = {}) {\n const result = TrainingProjectListSchema.parse(await this.request(`?${new URLSearchParams(options.cursor ? { cursor: options.cursor } : {})}`, \"GET\", undefined, options.signal));\n if (result.teamId !== this.options.teamId || result.projects.some(p => p.teamId !== this.options.teamId)) throw new Error(\"Project list workspace mismatch.\");\n return result;\n }\n async get(id: string, signal?: AbortSignal) { return this.readback(await this.request(`/${encodeURIComponent(id)}`, \"GET\", undefined, signal), id); }\n async save(input: TrainingProjectWrite, signal?: AbortSignal) {\n const request = TrainingProjectWriteSchema.parse(input);\n const result = this.readback(await this.request(`/${encodeURIComponent(request.id)}`, \"PUT\", request, signal), request.id);\n if (result.revision !== request.expectedRevision + 1 || contentHash(result.content) !== contentHash(request.content)) throw new Error(\"Project write revision mismatch.\");\n if (request.ownerScope && result.ownerScope !== request.ownerScope) throw new Error(\"Project owner scope mismatch.\");\n return result;\n }\n async archive(id: string, input: { operationId: string; expectedRevision: number; archived: boolean }, signal?: AbortSignal) {\n const request = TrainingProjectArchiveSchema.parse(input);\n const result = this.readback(await this.request(`/${encodeURIComponent(id)}/archive`, \"POST\", request, signal), id);\n if (result.revision !== request.expectedRevision + 1 || result.archived !== request.archived) throw new Error(\"Project archive receipt mismatch.\");\n return result;\n }\n private readback(value: unknown, id: string) {\n const result = TrainingProjectSchema.parse(value);\n if (result.id !== id || result.teamId !== this.options.teamId) throw new Error(\"Project identity mismatch.\");\n return result;\n }\n private async request(path: string, method: string, body?: unknown, signal?: AbortSignal): Promise<unknown> {\n const response = await (this.options.fetch ?? fetch)(`${this.baseUrl}/v1/training-projects${path}`, {\n method, signal, redirect: \"error\", headers: { Authorization: `Bearer ${this.options.apiKey}`, \"X-OpenPond-Team-Id\": this.options.teamId, \"Content-Type\": \"application/json\" },\n ...(body === undefined ? {} : { body: JSON.stringify(body) }),\n });\n if (!response.ok) throw new Error(`Project request failed (${response.status}).`);\n return response.json();\n }\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import { ProfileEvaluationRunSourceSchema } from \"@openpond/evals\";\nimport { StandaloneHarnessExperimentSourceSchema } from \"@openpond/evals/experiments\";\nimport { z } from \"zod\";\nimport { ImmutableReleaseRefSchema, contentHash } from \"@openpond/harness\";\n\nconst Id = z.string().trim().min(1).max(240);\nconst Revision = z.number().int().positive();\nexport const TrainingResourceKindSchema = z.enum([\"dataset\", \"evaluator\", \"model\", \"training_configuration\", \"training_run\", \"harness\", \"environment\", \"experiment\", \"learning_policy\", \"deployment\"]);\nexport const TrainingResourceLinkSchema = z.object({\n kind: TrainingResourceKindSchema, resourceId: Id, release: ImmutableReleaseRefSchema.nullable(),\n role: z.enum([\"training\", \"validation\", \"holdout\", \"target\", \"reward\", \"evaluation\", \"serving\", \"source\"]),\n}).strict();\nexport const TrainingTargetSchema = z.discriminatedUnion(\"kind\", [\n z.object({ kind: z.literal(\"model\"), providerId: Id, modelId: Id, artifact: ImmutableReleaseRefSchema.nullable(),\n messages: z.array(z.object({ role: z.enum([\"system\", \"user\", \"assistant\"]), content: z.string().max(100_000) }).strict()).max(100) }).strict(),\n z.object({ kind: z.literal(\"harness\"), profileRepositoryId: Id, source: ProfileEvaluationRunSourceSchema }).strict(),\n z.object({ kind: z.literal(\"agent\"), source: StandaloneHarnessExperimentSourceSchema }).strict(),\n z.object({ kind: z.literal(\"suite\"), profileRepositoryId: Id, suiteId: Id, sources: z.array(ProfileEvaluationRunSourceSchema).min(1).max(1_000) }).strict().superRefine((value, ctx) => {\n const first = value.sources[0]!;\n const identities = new Set<string>();\n for (const [index, source] of value.sources.entries()) {\n if (identities.has(source.definitionId)) ctx.addIssue({ code: \"custom\", path: [\"sources\", index], message: \"Suite definitions must be unique.\" });\n identities.add(source.definitionId);\n if (source.profileId !== first.profileId || source.sourceRevision !== first.sourceRevision || source.catalogHash !== first.catalogHash || contentHash(source.harnessRelease) !== contentHash(first.harnessRelease))\n ctx.addIssue({ code: \"custom\", path: [\"sources\", index], message: \"Suite checks must belong to the same pinned Profile source and Harness release.\" });\n }\n }),\n]);\nexport const TrainingProjectContentSchema = z.object({\n name: z.string().trim().min(1).max(200), description: z.string().max(10_000),\n targets: z.array(z.object({ id: Id, name: z.string().trim().min(1).max(200), target: TrainingTargetSchema }).strict()).max(100),\n defaultTargetId: Id.nullable(), resources: z.array(TrainingResourceLinkSchema).max(1_000),\n}).strict().superRefine((value, ctx) => {\n if (new Set(value.targets.map(t => t.id)).size !== value.targets.length) ctx.addIssue({ code: \"custom\", path: [\"targets\"], message: \"Target identities must be unique.\" });\n if (value.defaultTargetId && !value.targets.some(t => t.id === value.defaultTargetId)) ctx.addIssue({ code: \"custom\", path: [\"defaultTargetId\"], message: \"Default target must belong to this Project.\" });\n if (new Set(value.resources.map(r => contentHash(r))).size !== value.resources.length) ctx.addIssue({ code: \"custom\", path: [\"resources\"], message: \"Resource links must be unique.\" });\n});\nexport const TrainingProjectSchema = z.object({\n schemaVersion: z.literal(\"openpond.trainingProject.v1\"), id: Id, teamId: Id, creatorUserId: Id,\n ownerScope: z.enum([\"workspace\", \"personal\"]).optional(),\n revision: Revision, content: TrainingProjectContentSchema, archived: z.boolean(),\n createdAt: z.string().datetime(), updatedAt: z.string().datetime(),\n}).strict();\nexport const TrainingProjectWriteSchema = z.object({\n operationId: Id, id: Id, expectedRevision: z.number().int().nonnegative(), content: TrainingProjectContentSchema,\n ownerScope: z.enum([\"workspace\", \"personal\"]).optional(),\n}).strict();\nexport const TrainingProjectArchiveSchema = z.object({ operationId: Id, expectedRevision: Revision, archived: z.boolean() }).strict();\nexport const TrainingProjectListSchema = z.object({ teamId: Id, projects: z.array(TrainingProjectSchema).max(100), nextCursor: Id.nullable() }).strict();\nexport const TrainingOperationReadinessSchema = z.object({\n operation: z.enum([\"evaluate\", \"train\", \"enable_learning\", \"accept_candidate\", \"serve\"]),\n support: z.enum([\"supported\", \"unsupported\"]), state: z.enum([\"ready\", \"needs_setup\", \"blocked\"]),\n reasons: z.array(z.object({ code: Id, message: z.string().min(1).max(2_000), field: z.string().nullable(),\n action: z.enum([\"choose_target\", \"choose_data\", \"choose_evaluator\", \"configure_runtime\", \"request_access\", \"configure_budget\", \"wait\", \"review_evidence\"]).nullable() }).strict()).max(100),\n}).strict().superRefine((value, ctx) => {\n if (value.state === \"ready\" && (value.support !== \"supported\" || value.reasons.length)) ctx.addIssue({ code: \"custom\", message: \"Ready operations must be supported with no blockers.\" });\n if (value.state !== \"ready\" && !value.reasons.length) ctx.addIssue({ code: \"custom\", message: \"Unavailable operations must explain the next step.\" });\n});\nexport type TrainingProject = z.infer<typeof TrainingProjectSchema>;\nexport type TrainingProjectContent = z.infer<typeof TrainingProjectContentSchema>;\nexport type TrainingProjectWrite = z.infer<typeof TrainingProjectWriteSchema>;\nexport type TrainingResourceLink = z.infer<typeof TrainingResourceLinkSchema>;\nexport type TrainingTarget = z.infer<typeof TrainingTargetSchema>;\n", "import { contentHash } from \"@openpond/harness\";\nimport { TrainingProjectSchema, TrainingProjectWriteSchema, TrainingProjectArchiveSchema, TrainingProjectListSchema, type TrainingProjectWrite } from \"./training-project-contracts.js\";\n\nexport class OpenPondTrainingProjectClient {\n private readonly baseUrl: string;\n constructor(private readonly options: { baseUrl: string; apiKey: string; teamId: string; fetch?: typeof fetch }) {\n const url = new URL(options.baseUrl);\n if (![\"http:\", \"https:\"].includes(url.protocol) || url.username || url.password || url.search || url.hash || !options.apiKey.trim() || !options.teamId.trim()) throw new Error(\"A clean API origin and workspace credentials are required.\");\n this.baseUrl = url.toString().replace(/\\/+$/, \"\");\n }\n async list(options: { cursor?: string; signal?: AbortSignal } = {}) {\n const result = TrainingProjectListSchema.parse(await this.request(`?${new URLSearchParams(options.cursor ? { cursor: options.cursor } : {})}`, \"GET\", undefined, options.signal));\n if (result.teamId !== this.options.teamId || result.projects.some(p => p.teamId !== this.options.teamId)) throw new Error(\"Project list workspace mismatch.\");\n return result;\n }\n async get(id: string, signal?: AbortSignal) { return this.readback(await this.request(`/${encodeURIComponent(id)}`, \"GET\", undefined, signal), id); }\n async save(input: TrainingProjectWrite, signal?: AbortSignal) {\n const request = TrainingProjectWriteSchema.parse(input);\n const result = this.readback(await this.request(`/${encodeURIComponent(request.id)}`, \"PUT\", request, signal), request.id);\n if (result.revision !== request.expectedRevision + 1 || contentHash(result.content) !== contentHash(request.content)) throw new Error(\"Project write revision mismatch.\");\n if (request.ownerScope && result.ownerScope !== request.ownerScope) throw new Error(\"Project owner scope mismatch.\");\n return result;\n }\n async archive(id: string, input: { operationId: string; expectedRevision: number; archived: boolean }, signal?: AbortSignal) {\n const request = TrainingProjectArchiveSchema.parse(input);\n const result = this.readback(await this.request(`/${encodeURIComponent(id)}/archive`, \"POST\", request, signal), id);\n if (result.revision !== request.expectedRevision + 1 || result.archived !== request.archived) throw new Error(\"Project archive receipt mismatch.\");\n return result;\n }\n private readback(value: unknown, id: string) {\n const result = TrainingProjectSchema.parse(value);\n if (result.id !== id || result.teamId !== this.options.teamId) throw new Error(\"Project identity mismatch.\");\n return result;\n }\n private async request(path: string, method: string, body?: unknown, signal?: AbortSignal): Promise<unknown> {\n const response = await (this.options.fetch ?? fetch)(`${this.baseUrl}/v1/training-projects${path}`, {\n method, signal, redirect: \"error\", headers: { Authorization: `Bearer ${this.options.apiKey}`, \"X-OpenPond-Team-Id\": this.options.teamId, \"Content-Type\": \"application/json\" },\n ...(body === undefined ? {} : { body: JSON.stringify(body) }),\n });\n if (!response.ok) throw new Error(`Project request failed (${response.status}).`);\n return response.json();\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -54,6 +54,7 @@ export declare const DatasetPopulationPageSchema: z.ZodObject<{
|
|
|
54
54
|
id: z.ZodString;
|
|
55
55
|
version: z.ZodString;
|
|
56
56
|
contentHash: z.ZodString;
|
|
57
|
+
name: z.ZodOptional<z.ZodString>;
|
|
57
58
|
feedbackKey: z.ZodString;
|
|
58
59
|
release: z.ZodNullable<z.ZodObject<{
|
|
59
60
|
id: z.ZodString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataset-population.d.ts","sourceRoot":"","sources":["../../../../../src/dataset-population.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,4BAA4B;;;;;;;;;;;;kBAKsK,CAAC;AAOhN,eAAO,MAAM,2BAA2B
|
|
1
|
+
{"version":3,"file":"dataset-population.d.ts","sourceRoot":"","sources":["../../../../../src/dataset-population.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,4BAA4B;;;;;;;;;;;;kBAKsK,CAAC;AAOhN,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAWtC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF;kFACkF;AAClF,qBAAa,+BAA+B;IAE9B,OAAO,CAAC,QAAQ,CAAC,OAAO;IADpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBACJ,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;KAAE;IAKzG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,qBAAqB,CAAC;CA0BtH"}
|