openpond-sdk 0.9.4 → 0.9.6

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.
Files changed (31) hide show
  1. package/dist/{chunk-DNBAJUVR.js → chunk-6D4JIOOC.js} +8 -3
  2. package/dist/{chunk-DNBAJUVR.js.map → chunk-6D4JIOOC.js.map} +2 -2
  3. package/dist/dataset-workspaces.js +31 -2
  4. package/dist/dataset-workspaces.js.map +2 -2
  5. package/dist/experiments.js +33 -1
  6. package/dist/experiments.js.map +3 -3
  7. package/dist/learning.js +55 -0
  8. package/dist/learning.js.map +4 -4
  9. package/dist/taskset-packages.js +1 -1
  10. package/dist/training-projects.js +4 -1
  11. package/dist/training-projects.js.map +2 -2
  12. package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts +1080 -1
  13. package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts.map +1 -1
  14. package/dist/types/packages/sdk/src/dataset-workspace-contracts.d.ts +34 -0
  15. package/dist/types/packages/sdk/src/dataset-workspace-contracts.d.ts.map +1 -1
  16. package/dist/types/packages/sdk/src/experiment-client.d.ts +16 -0
  17. package/dist/types/packages/sdk/src/experiment-client.d.ts.map +1 -1
  18. package/dist/types/packages/sdk/src/experiment-inspection.d.ts +50 -0
  19. package/dist/types/packages/sdk/src/experiment-inspection.d.ts.map +1 -0
  20. package/dist/types/packages/sdk/src/experiments.d.ts +1 -0
  21. package/dist/types/packages/sdk/src/experiments.d.ts.map +1 -1
  22. package/dist/types/packages/sdk/src/grader-inspection.d.ts +568 -0
  23. package/dist/types/packages/sdk/src/grader-inspection.d.ts.map +1 -0
  24. package/dist/types/packages/sdk/src/learning.d.ts +1 -0
  25. package/dist/types/packages/sdk/src/learning.d.ts.map +1 -1
  26. package/dist/types/packages/sdk/src/taskset-authored-files.d.ts.map +1 -1
  27. package/dist/types/packages/sdk/src/training-project-client.d.ts +4 -0
  28. package/dist/types/packages/sdk/src/training-project-client.d.ts.map +1 -1
  29. package/dist/types/packages/sdk/src/training-project-contracts.d.ts +12 -0
  30. package/dist/types/packages/sdk/src/training-project-contracts.d.ts.map +1 -1
  31. package/package.json +1 -1
@@ -306,8 +306,13 @@ function prepareAuthoredTasksetSource(tasksetInput, sourceFiles, adapterId) {
306
306
  const content = new TextEncoder().encode(grader.rubric);
307
307
  const sourcePath = `graders/rubric-${sha256(content)}.md`;
308
308
  bytes.set(sourcePath, content);
309
- const asset = ref(`rubric-${grader.id}`, sourcePath, "text/markdown", "verifier");
310
- add(asset);
309
+ let asset = ref(`rubric-${grader.id}`, sourcePath, "text/markdown", "verifier");
310
+ const previous = ImmutableAssetRefSchema.safeParse(grader.metadata.portableRubricRef);
311
+ if (previous.success && previous.data.contentHash === asset.contentHash && previous.data.sizeBytes === asset.sizeBytes) {
312
+ if (previous.data.visibility === "policy") throw new Error("A grader rubric cannot become policy-visible.");
313
+ asset = previous.data;
314
+ }
315
+ add(asset, sourcePath);
311
316
  generatedFiles.push({ path: sourcePath, role: "verifier", content: grader.rubric });
312
317
  return { ...grader, metadata: { ...grader.metadata, portableRubricRef: asset } };
313
318
  }
@@ -377,4 +382,4 @@ export {
377
382
  compileTasksetDraftWorkspace,
378
383
  compileModelTasksetDraftWorkspace
379
384
  };
380
- //# sourceMappingURL=chunk-DNBAJUVR.js.map
385
+ //# sourceMappingURL=chunk-6D4JIOOC.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/model-taskset-authoring.ts", "../src/model-bound-taskset-authoring.ts", "../src/taskset-authored-files.ts", "../src/taskset-authored-tool-environment.ts", "../src/taskset-draft-package-compiler.ts"],
4
- "sourcesContent": ["import { contentHash } from \"@openpond/harness\";\nimport { createVerifierSetRelease } from \"@openpond/evals\";\nimport { learningRef, sameLearningRef, sealLearningContent } from \"@openpond/evals/learning\";\nimport { TasksetReleaseSchema } from \"@openpond/evals/tasksets\";\nimport { ModelTasksetAuthoringOwnerSchema, ModelTasksetDraftPreparationSchema, ModelTasksetDraftRequestSchema, type ModelTasksetDraftPreparation, type ModelTasksetDraftRequest } from \"./model-taskset-authoring-contracts.js\";\nimport { assertModelTasksetAuthoring, modelAuthoredTasksetId } from \"./model-taskset-authoring-lineage.js\";\nimport { createTasksetPackage, validateTasksetPackage, type TasksetPackage } from \"./taskset-package-contracts.js\";\nimport { createTasksetPackageExecutionFile, resolveTasksetPackageExecution } from \"./taskset-package-execution.js\";\nimport { modelStarterExecutionAssetId } from \"./model-starter-execution.js\";\nimport { deriveModelTaskset } from \"./model-taskset-derivation.js\";\nimport { publishBoundModelTasksetDraftPackage } from \"./model-bound-taskset-authoring.js\";\n\nexport * from \"./model-taskset-authoring-contracts.js\";\n\n/** Resolve under an authorized Model CAS. The host retains requestHash and the\n * preparation so retrying cannot choose newer source bytes or another draft. */\nexport function prepareModelTasksetDraft(input: { request: ModelTasksetDraftRequest; owner: { scopeId: string; modelId: string }; source: TasksetPackage }): ModelTasksetDraftPreparation {\n const request = ModelTasksetDraftRequestSchema.parse(input.request);\n const owner = ModelTasksetAuthoringOwnerSchema.parse(input.owner);\n const source = validateTasksetPackage(input.source);\n if (source.learningResources) throw new Error(\"Reviewed Tasksets require their reviewed authoring workflow.\");\n if (source.contentHash !== request.sourcePackageHash) throw new Error(\"Taskset draft source package changed.\");\n if (source.modelResources) {\n const derived = deriveModelTaskset({ owner, source: { ...source.modelResources, taskset: source.taskset, executionResources: { environment: source.environment, verifierSet: source.verifierSet } },\n rewardBinding: source.modelResources.rewardBinding, rewards: source.modelResources.rewards, assets: source.modelResources.assets });\n const lineage = derived.taskset.metadata.modelTasksetDerivation as { owner: typeof owner; root: ReturnType<typeof learningRef>; parent: ReturnType<typeof learningRef> };\n return ModelTasksetDraftPreparationSchema.parse({ schemaVersion: \"openpond.modelTasksetDraftPreparation.v1\",\n draftId: `model-taskset-draft-${contentHash({ owner, operationId: request.operationId })}`, requestHash: contentHash(request),\n sourcePackageHash: source.contentHash, sourceTasksetRef: learningRef(source.taskset), tasksetId: derived.taskset.id,\n tasksetRevision: derived.taskset.revision, lineage: { ...lineage, schemaVersion: \"openpond.modelTasksetAuthoring.v1\" }, authoringGraph: \"bound\",\n });\n }\n const previous = assertModelTasksetAuthoring(source.taskset);\n const owned = previous && contentHash(previous.owner) === contentHash(owner);\n const root = owned ? previous.root : learningRef(source.taskset);\n const lineage = { schemaVersion: \"openpond.modelTasksetAuthoring.v1\" as const, owner, root, parent: learningRef(source.taskset) };\n return ModelTasksetDraftPreparationSchema.parse({\n schemaVersion: \"openpond.modelTasksetDraftPreparation.v1\",\n draftId: `model-taskset-draft-${contentHash({ owner, operationId: request.operationId })}`,\n requestHash: contentHash(request), sourcePackageHash: source.contentHash, sourceTasksetRef: learningRef(source.taskset),\n tasksetId: modelAuthoredTasksetId(lineage), tasksetRevision: owned ? source.taskset.revision + 1 : 1, lineage,\n });\n}\n\n/** The edited package already carries exact file bytes and execution releases.\n * Seal the owned revision without copying qualification for different bytes. */\nexport function publishModelTasksetDraftPackage(input: { preparation: ModelTasksetDraftPreparation; edited: TasksetPackage; source?: TasksetPackage }): TasksetPackage {\n const prepared = ModelTasksetDraftPreparationSchema.parse(input.preparation);\n if (!sameLearningRef(prepared.sourceTasksetRef, prepared.lineage.parent)) throw new Error(\"Taskset draft preparation differs from its source lineage.\");\n if (prepared.authoringGraph === \"bound\") {\n if (!input.source) throw new Error(\"Bound Taskset authoring requires its retained source package.\");\n return publishBoundModelTasksetDraftPackage({ preparation: prepared, source: input.source, edited: input.edited });\n }\n const edited = requireOrdinaryPackage(input.edited);\n const { contentHash: _verifierHash, ...verifierContent } = edited.verifierSet;\n const verifierSet = createVerifierSetRelease({ ...verifierContent, id: `${prepared.tasksetId}-verifiers`, revision: prepared.tasksetRevision,\n calibrationReceiptRefs: [], metadata: { sourceVerifierSet: learningRef(edited.verifierSet) } });\n const { contentHash: _hash, ...content } = edited.taskset;\n const taskset = TasksetReleaseSchema.parse(sealLearningContent({ ...content, id: prepared.tasksetId, revision: prepared.tasksetRevision,\n verifierSetRelease: { id: verifierSet.id, contentHash: verifierSet.contentHash },\n metadata: {\n modelTasksetAuthoring: prepared.lineage,\n ...(edited.taskset.metadata.environmentResources === undefined ? {} : { environmentResources: edited.taskset.metadata.environmentResources }),\n ...(edited.taskset.metadata.ordinaryAuthoring === undefined ? {} : { ordinaryAuthoring: edited.taskset.metadata.ordinaryAuthoring }),\n },\n }));\n const resolved = resolveTasksetPackageExecution(edited);\n const files = resolved ? [\n ...edited.files.filter(file => file.asset.id !== modelStarterExecutionAssetId(edited.taskset)),\n createTasksetPackageExecutionFile({ ...resolved.execution, verifierSet }),\n ] : edited.files;\n return createTasksetPackage({ schemaVersion: \"openpond.tasksetPackage.v1\", taskset, environment: edited.environment, verifierSet, files });\n}\n\nfunction requireOrdinaryPackage(value: unknown) {\n const result = validateTasksetPackage(value);\n if (result.modelResources || result.learningResources) throw new Error(\"This Taskset requires its bound or reviewed authoring workflow.\");\n return result;\n}\n", "import { contentHash } from \"@openpond/harness\";\nimport { LearningTextAssetSchema, TaskDefinitionSchema, learningRef, sameLearningRef, sealLearningContent } from \"@openpond/evals/learning\";\nimport { TasksetReleaseSchema } from \"@openpond/evals/tasksets\";\nimport { ModelTasksetDerivationSchema, compileModelTasksetReward } from \"./model-taskset-derivation.js\";\nimport type { ModelTasksetDraftPreparation } from \"./model-taskset-authoring-contracts.js\";\nimport { createTasksetPackage, decodeTasksetPackageFile, resolveTasksetPackageInstructions, validateTasksetPackage, type TasksetPackage } from \"./taskset-package-contracts.js\";\nimport { resolveTasksetPackageExecution } from \"./taskset-package-execution.js\";\n\n/** Task edits retain the exact saved Reward. Changing its implementation or\n * grading policy goes through Reward publication and Model selection. */\nexport function publishBoundModelTasksetDraftPackage(input: {\n preparation: ModelTasksetDraftPreparation; source: TasksetPackage; edited: TasksetPackage;\n}): TasksetPackage {\n const source = validateTasksetPackage(input.source);\n const edited = validateTasksetPackage(input.edited);\n const prepared = input.preparation;\n if (prepared.authoringGraph !== \"bound\" || !source.modelResources || source.learningResources || edited.modelResources || edited.learningResources) throw new Error(\"Bound task editing requires its source Reward and an ordinary edited workspace.\");\n if (source.contentHash !== prepared.sourcePackageHash || !sameLearningRef(learningRef(source.taskset), prepared.sourceTasksetRef)) throw new Error(\"Bound draft differs from its retained source package.\");\n const normalizedGraders = (value: TasksetPackage) => value.taskset.graders.map(grader => grader.kind === \"custom_verifier\" ? { ...grader, exportName: grader.exportName ?? \"verify\" } : grader);\n if (contentHash(normalizedGraders(source)) !== contentHash(normalizedGraders(edited))) throw new Error(\"Edit the saved Reward in Rewards before changing this Taskset's graders.\");\n const resources = source.modelResources;\n const assets = new Map(resources.assets.map(asset => [asset.id, asset]));\n const execution = resolveTasksetPackageExecution(edited);\n const sourceExecution = resolveTasksetPackageExecution(source);\n const environmentContent = (value: TasksetPackage[\"environment\"]) => {\n const { id: _id, revision: _revision, contentHash: _hash, metadata, ...contract } = value;\n const { javascriptEnvironment: _javascript, ...retained } = metadata;\n return { ...contract, metadata: { ...retained, resources: retained.resources ?? [] } };\n };\n const javascriptContent = (value: typeof execution) => {\n if (!value) return null;\n const { id: _id, revision: _revision, contentHash: _hash, ...contract } = value.execution.javascript;\n return contract;\n };\n const unchangedEnvironment = contentHash(environmentContent(source.environment)) === contentHash(environmentContent(edited.environment))\n && contentHash(javascriptContent(sourceExecution)) === contentHash(javascriptContent(execution));\n const selectedEnvironment = unchangedEnvironment ? source.environment : edited.environment;\n const selectedExecution = unchangedEnvironment ? sourceExecution : execution;\n const requiredIds = new Set([\n ...resources.assets.map(asset => asset.id),\n ...edited.taskset.tasks.flatMap(task => task.privilegedContextRef ? [task.privilegedContextRef] : []),\n ...[edited.environment.actionSchemaRef, edited.environment.observationSchemaRef, edited.environment.stateSchemaRef].flatMap(ref => ref ? [ref.id] : []),\n ...(execution?.assets.map(asset => asset.id) ?? []),\n ]);\n for (const id of requiredIds) {\n const file = edited.files.find(file => file.asset.id === id);\n if (!file) throw new Error(`Bound Taskset asset is missing: ${id}.`);\n const text = new TextDecoder(\"utf-8\", { fatal: true }).decode(decodeTasksetPackageFile(file));\n assets.set(id, LearningTextAssetSchema.parse(sealLearningContent({ schemaVersion: \"openpond.learningTextAsset.v1\", id, revision: 1, asset: file.asset, text })));\n }\n const instructions = resolveTasksetPackageInstructions(edited);\n const { contentHash: _definitionHash, ...definitionContent } = resources.taskDefinition;\n const { policy, environment, environmentRelease, tools, capabilities, verifierSetRelease } = edited.taskset;\n const taskDefinition = TaskDefinitionSchema.parse(sealLearningContent({ ...definitionContent, instructions,\n execution: { policy, environment, environmentRelease, tools, capabilities, verifierSetRelease },\n }));\n const { contentHash: _taskHash, ...taskContent } = edited.taskset;\n const taskset = TasksetReleaseSchema.parse(sealLearningContent({ ...taskContent, tasks: edited.taskset.tasks.map(task => resources.instructionMode === \"per_task\" ? task\n : { ...task, policyVisibleContext: { ...task.policyVisibleContext, instructions } }) }));\n const derived = compileModelTasksetReward({ owner: prepared.lineage.owner,\n source: { ...resources, taskset: source.taskset, executionResources: { environment: source.environment, verifierSet: source.verifierSet } },\n rewardBinding: resources.rewardBinding, rewards: resources.rewards, assets: [...assets.values()],\n edits: { taskset, taskDefinition, executionResources: { environment: selectedEnvironment, verifierSet: edited.verifierSet }, ...(selectedExecution ? { execution: selectedExecution.execution } : {}) },\n });\n const lineage = ModelTasksetDerivationSchema.parse(derived.taskset.metadata.modelTasksetDerivation);\n if (derived.taskset.id !== prepared.tasksetId || derived.taskset.revision !== prepared.tasksetRevision\n || contentHash({ ...lineage, schemaVersion: prepared.lineage.schemaVersion }) !== contentHash(prepared.lineage)) throw new Error(\"Bound draft differs from its retained ownership lineage.\");\n const { taskset: published, executionResources, ...modelResources } = derived;\n return createTasksetPackage({ schemaVersion: \"openpond.tasksetPackage.v1\", taskset: published, ...executionResources!, modelResources, files: edited.files });\n}\n", "import { z } from \"zod\";\nimport { contentHash, ImmutableAssetRefSchema, sha256, type ImmutableAssetRef } from \"@openpond/harness\";\nimport { TasksetSchema, type GeneratedTaskFile, type Taskset } from \"./taskset-authored-contracts.js\";\nimport { computeTasksetHash } from \"./taskset-authored-validation.js\";\nimport { projectPortableTaskRecord } from \"./taskset-authored-portable-release.js\";\nimport { TasksetDraftFilePathSchema } from \"./model-taskset-authoring-contracts.js\";\nimport { MAX_TASKSET_PACKAGE_BYTES } from \"./taskset-package-files.js\";\nimport { prepareAuthoredToolEnvironment } from \"./taskset-authored-tool-environment.js\";\n\nexport const AuthoredTasksetFileInventorySchema = z.array(z.object({\n asset: ImmutableAssetRefSchema, sourcePath: z.string().min(1),\n}).strict()).max(10_000);\n\nconst GENERATED_MANIFESTS = new Set([\"taskset.json\", \"capabilities.json\", \"data/tasks.jsonl\", \"graders/graders.json\", \"fixtures/grader-fixtures.json\", \"environment/taskset.ts\"]);\nexport function isGeneratedTasksetPublicationFilePath(path: string): boolean { return GENERATED_MANIFESTS.has(path); }\n\n/** Seal one captured file population; hosts own filesystem or object-store capture. */\nexport function prepareAuthoredTasksetSource(tasksetInput: Taskset, sourceFiles: ReadonlyMap<string, Uint8Array>, adapterId: string) {\n const taskset = TasksetSchema.parse(tasksetInput);\n if (taskset.metadata.taskDefinition !== undefined || taskset.metadata.rewardBinding !== undefined) return { taskset, generatedFiles: [] as GeneratedTaskFile[] };\n const bytes = new Map<string, Uint8Array>();\n let total = 0;\n for (const [name, data] of sourceFiles) {\n TasksetDraftFilePathSchema.parse(name);\n total += data.byteLength;\n if (bytes.size >= 10_000 || total > MAX_TASKSET_PACKAGE_BYTES * 3 / 4) throw new Error(\"Taskset source exceeds the package byte limit.\");\n bytes.set(name, data.slice());\n }\n const aggregator = taskset.metrics?.customAggregator;\n const aggregatorBytes = aggregator ? bytes.get(aggregator.module) : undefined;\n if (aggregator && !aggregatorBytes) throw new Error(\"Declared Taskset metric module is missing.\");\n const metrics = aggregator && aggregatorBytes ? { ...taskset.metrics!, customAggregator: { ...aggregator, contentHash: sha256(aggregatorBytes) } } : taskset.metrics;\n const inventory = new Map<string, { asset: ImmutableAssetRef; sourcePath: string }>();\n const declaredPaths = new Set<string>();\n const generatedFiles: GeneratedTaskFile[] = [];\n const ref = (id: string, sourcePath: string, mediaType: string, visibility: ImmutableAssetRef[\"visibility\"]): ImmutableAssetRef => {\n const source = bytes.get(sourcePath);\n if (!source) throw new Error(`Declared Taskset file is missing: ${sourcePath}.`);\n return { id, path: sourcePath, contentHash: sha256(source), sizeBytes: source.byteLength, mediaType, visibility };\n };\n const add = (asset: ImmutableAssetRef, sourcePath = asset.path) => {\n const previous = inventory.get(asset.id);\n if (previous && contentHash(previous) !== contentHash({ asset, sourcePath })) throw new Error(`Conflicting Taskset file identity: ${asset.id}.`);\n const source = bytes.get(sourcePath);\n if (!source || source.length !== asset.sizeBytes || sha256(source) !== asset.contentHash) throw new Error(`Taskset file differs from its declared bytes: ${asset.id}.`);\n inventory.set(asset.id, { asset, sourcePath });\n declaredPaths.add(sourcePath);\n };\n for (const task of taskset.tasks) {\n const portable = projectPortableTaskRecord(task);\n for (const asset of portable.artifactRefs) add(asset, task.assets?.find(candidate => candidate.id === asset.id)?.artifactRef ?? asset.path);\n for (const output of portable.requiredOutputs ?? []) if (output.schemaRef) add(output.schemaRef);\n }\n for (const resource of taskset.environment.resources ?? []) add(ref(resource.id, resource.path, resource.mediaType ?? \"application/octet-stream\", resource.visibility === \"policy_visible\" ? \"policy\" : \"host_private\"));\n const graders = taskset.graders.map(grader => {\n if (grader.kind === \"custom_verifier\") {\n let asset = ref(`verifier-${grader.id}`, grader.module, \"application/javascript\", \"host_private\");\n const previous = ImmutableAssetRefSchema.safeParse(grader.metadata.portableVerifierRef);\n if (previous.success && previous.data.contentHash === asset.contentHash && previous.data.sizeBytes === asset.sizeBytes) asset = previous.data;\n add(asset, grader.module);\n return { ...grader, metadata: { ...grader.metadata, portableVerifierRef: asset } };\n }\n if (grader.kind === \"human\" || grader.kind === \"model_judge\") {\n const content = new TextEncoder().encode(grader.rubric);\n const sourcePath = `graders/rubric-${sha256(content)}.md`;\n bytes.set(sourcePath, content);\n const asset = ref(`rubric-${grader.id}`, sourcePath, \"text/markdown\", \"verifier\");\n add(asset);\n generatedFiles.push({ path: sourcePath, role: \"verifier\", content: grader.rubric });\n return { ...grader, metadata: { ...grader.metadata, portableRubricRef: asset } };\n }\n return grader;\n });\n if (aggregator && ![...inventory.values()].some(file => file.asset.path === aggregator.module && file.sourcePath === aggregator.module && file.asset.visibility !== \"policy\")) {\n add(ref(`metric-${contentHash(aggregator.module)}`, aggregator.module, \"application/javascript\", \"host_private\"));\n }\n // Unreferenced source files are retained privately. Only explicit task or\n // environment declarations can make bytes visible to the policy.\n const previousInventory = AuthoredTasksetFileInventorySchema.parse(taskset.metadata.portableFileInventory ?? []);\n for (const name of [...bytes.keys()].sort()) if (!declaredPaths.has(name)) {\n const previous = previousInventory.find(file => file.sourcePath === name && !inventory.has(file.asset.id));\n add(previous\n ? { ...ref(previous.asset.id, name, previous.asset.mediaType, previous.asset.visibility), path: previous.asset.path }\n : ref(`taskset-file-${contentHash(name)}`, name, \"application/octet-stream\", \"host_private\"), name);\n }\n // Publication creates a new release; imported cache and execution identities\n // describe the source revision, not the newly edited graders.\n const { importedPackageHash, derivedPortableMetadata: _derived, ...metadata } = taskset.metadata;\n const environmentMetadata = { ...taskset.environment.metadata };\n if (environmentMetadata.portableExecutionResources !== undefined) {\n const resources = z.object({ environment: z.unknown(), verifierSet: z.unknown().optional() }).parse(environmentMetadata.portableExecutionResources);\n environmentMetadata.portableExecutionResources = { environment: resources.environment };\n }\n const prepared = TasksetSchema.parse({ ...taskset, graders, metrics,\n environment: { ...taskset.environment, metadata: environmentMetadata },\n metadata: { ...metadata, ...(importedPackageHash === undefined ? {} : { sourceImportedPackageHash: importedPackageHash }), portableFileInventory: AuthoredTasksetFileInventorySchema.parse([...inventory.values()].sort((left, right) => left.asset.id.localeCompare(right.asset.id))) } });\n const executable = prepareAuthoredToolEnvironment(prepared, bytes, [...inventory.values()], adapterId);\n return { taskset: TasksetSchema.parse({ ...executable.taskset, contentHash: computeTasksetHash(executable.taskset) }), generatedFiles: [...generatedFiles, ...executable.generatedFiles] };\n}\n", "import { TasksetSchema, type GeneratedTaskFile, type Taskset } from \"./taskset-authored-contracts.js\";\nimport { createEnvironmentRelease } from \"@openpond/evals\";\nimport { JavaScriptEnvironmentDefinitionSchema } from \"@openpond/evals/javascript-environment\";\nimport { learningRef, sealLearningContent } from \"@openpond/evals/learning\";\nimport { contentHash, type ImmutableAssetRef } from \"@openpond/harness\";\nimport { computeTasksetHash } from \"./taskset-authored-validation.js\";\nimport { materializePortableTasksetRelease, portableTasksetEnvironment } from \"./taskset-authored-portable-release.js\";\nimport { ModelStarterExecutionSchema } from \"./model-starter-execution.js\";\nimport { createTasksetPackageExecutionFile } from \"./taskset-package-execution.js\";\nimport { decodeTasksetPackageFile } from \"./taskset-package-files.js\";\n\ntype Inventory = Array<{ asset: ImmutableAssetRef; sourcePath: string }>;\n\n/** Source bytes change in the draft; publication owns all executable hashes.\n * The private declaration is regenerated with the newly compiled verifiers. */\nexport function prepareAuthoredToolEnvironment(taskset: Taskset, bytes: Map<string, Uint8Array>, inventory: Inventory, adapterId: string): { taskset: Taskset; inventory: Inventory; generatedFiles: GeneratedTaskFile[] } {\n if (taskset.environment.entrypoint !== \"openpond.javascript-environment.v1\") return { taskset, inventory, generatedFiles: [] };\n const declarationPath = \"environment/execution.json\";\n const declaration = bytes.get(declarationPath);\n if (!declaration || declaration.length > 524_288) throw new Error(\"Authored tool environment requires its bounded private execution declaration.\");\n const previous = ModelStarterExecutionSchema.parse(JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(declaration)));\n const repin = (ref: ImmutableAssetRef | null): ImmutableAssetRef | null => {\n if (!ref) return null;\n const file = inventory.find(file => file.asset.id === ref.id && file.asset.path === ref.path);\n if (!file) throw new Error(`Authored environment dependency is missing: ${ref.id}.`);\n return file.asset;\n };\n const { contentHash: _javascriptHash, ...javascriptContent } = previous.javascript;\n const javascript = JavaScriptEnvironmentDefinitionSchema.parse(sealLearningContent({ ...javascriptContent,\n id: `javascript-${taskset.id}`, revision: taskset.revision, module: repin(previous.javascript.module),\n }));\n if (contentHash(javascript.tools) !== contentHash(taskset.environment.metadata.portableTools)\n || contentHash(javascript.tools.map(tool => tool.name)) !== contentHash(taskset.environment.toolNames)) throw new Error(\"Authored environment tools differ from the Taskset's declared tools.\");\n const environment = createEnvironmentRelease({ schemaVersion: \"openpond.environmentRelease.v1\", id: `environment-${taskset.id}`, revision: taskset.revision,\n contract: portableTasksetEnvironment(taskset), actionSchemaRef: repin(previous.environment.actionSchemaRef), observationSchemaRef: repin(previous.environment.observationSchemaRef), stateSchemaRef: repin(previous.environment.stateSchemaRef),\n artifactCollection: previous.environment.artifactCollection, adapterConformanceHashes: {},\n metadata: { javascriptEnvironment: learningRef(javascript), resources: taskset.environment.resources ?? [] },\n });\n const prepared = TasksetSchema.parse({ ...taskset, environment: { ...taskset.environment,\n metadata: { ...taskset.environment.metadata, portableExecutionResources: { environment } },\n } });\n const releases = materializePortableTasksetRelease({ taskset: prepared, adapterId: adapterId });\n const file = createTasksetPackageExecutionFile({ javascript, environment, verifierSet: releases.verifierSetRelease });\n const nextInventory = [...inventory.filter(entry => entry.sourcePath !== declarationPath), { asset: file.asset, sourcePath: declarationPath }];\n const finalized = TasksetSchema.parse({ ...prepared, metadata: { ...prepared.metadata, portableFileInventory: nextInventory } });\n return { taskset: TasksetSchema.parse({ ...finalized, contentHash: computeTasksetHash(finalized) }), inventory: nextInventory,\n generatedFiles: [{ path: declarationPath, role: \"environment\", content: new TextDecoder().decode(decodeTasksetPackageFile(file)) }],\n };\n}\n", "import { contentHash } from \"@openpond/harness\";\nimport { ModelTasksetDraftPreparationSchema, type ModelTasksetDraftPreparation } from \"./model-taskset-authoring-contracts.js\";\nimport { publishModelTasksetDraftPackage } from \"./model-taskset-authoring.js\";\nimport { publishTasksetDraft } from \"./taskset-draft-publication.js\";\nimport { validateTasksetDraftWorkspace, decodeTasksetDraftWorkspaceFile, type TasksetDraftWorkspace } from \"./taskset-draft-workspace.js\";\nimport { renderTasksetDraftManifests } from \"./taskset-draft-manifests.js\";\nimport { AuthoredTasksetFileInventorySchema, isGeneratedTasksetPublicationFilePath, prepareAuthoredTasksetSource } from \"./taskset-authored-files.js\";\nimport { materializePortableTasksetRelease } from \"./taskset-authored-portable-release.js\";\nimport { createTasksetPackage, type TasksetPackage } from \"./taskset-package-contracts.js\";\n\n/** Use the same validation, file pinning and release projection as Desktop.\n * Compilation neither executes models/graders nor selects the resulting release.\n * The host supplies its retained preparation and later commits Model/draft CAS. */\nexport function compileTasksetDraftWorkspace(input: {\n workspace: TasksetDraftWorkspace;\n preparation: ModelTasksetDraftPreparation | null;\n adapterId: string;\n now: string;\n source?: TasksetPackage;\n}) {\n const workspace = validateTasksetDraftWorkspace(input.workspace);\n const preparation = input.preparation === null ? null : ModelTasksetDraftPreparationSchema.parse(input.preparation);\n if (preparation ? workspace.draft.id !== preparation.draftId || workspace.draft.modelScope?.modelId !== preparation.lineage.owner.modelId\n || workspace.draft.profileId !== preparation.lineage.owner.scopeId\n || contentHash(workspace.draft.modelScope?.source ?? null) !== contentHash(preparation)\n : workspace.draft.modelScope?.source !== undefined) throw new Error(\"Taskset draft differs from its retained source preparation.\");\n // Validation and publication may happen in different requests. Package\n // identity depends on saved bytes, including their timestamp, not wall time.\n const taskset = publishTasksetDraft({ draft: workspace.draft, now: workspace.draft.updatedAt, sourcePackageHash: workspace.contentHash });\n const files = new Map(workspace.files.map(file => [file.path, decodeTasksetDraftWorkspaceFile(file)]));\n for (const [path, source] of renderTasksetDraftManifests(workspace.draft)) if (!isGeneratedTasksetPublicationFilePath(path)) files.set(path, new TextEncoder().encode(source));\n const authored = prepareAuthoredTasksetSource(taskset, files, input.adapterId);\n for (const file of authored.generatedFiles) files.set(file.path, new TextEncoder().encode(file.content));\n const releases = materializePortableTasksetRelease({ taskset: authored.taskset, adapterId: input.adapterId });\n const inventory = AuthoredTasksetFileInventorySchema.parse(authored.taskset.metadata.portableFileInventory);\n const edited = createTasksetPackage({ schemaVersion: \"openpond.tasksetPackage.v1\", taskset: releases.tasksetRelease,\n environment: releases.environmentRelease, verifierSet: releases.verifierSetRelease,\n files: inventory.map(entry => {\n const bytes = files.get(entry.sourcePath);\n if (!bytes) throw new Error(`Captured Taskset file is missing: ${entry.sourcePath}.`);\n return { asset: entry.asset, base64: Buffer.from(bytes).toString(\"base64\") };\n }),\n });\n return preparation ? publishModelTasksetDraftPackage({ preparation, edited, source: input.source }) : edited;\n}\n\n/** Model-derived authoring retains its stronger owner/source contract. */\nexport function compileModelTasksetDraftWorkspace(input: Parameters<typeof compileTasksetDraftWorkspace>[0]) {\n if (!input.workspace.draft.modelScope) throw new Error(\"Taskset draft requires a Model owner.\");\n return compileTasksetDraftWorkspace(input);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { contentHash } from \"@openpond/harness\";\nimport { createVerifierSetRelease } from \"@openpond/evals\";\nimport { learningRef, sameLearningRef, sealLearningContent } from \"@openpond/evals/learning\";\nimport { TasksetReleaseSchema } from \"@openpond/evals/tasksets\";\nimport { ModelTasksetAuthoringOwnerSchema, ModelTasksetDraftPreparationSchema, ModelTasksetDraftRequestSchema, type ModelTasksetDraftPreparation, type ModelTasksetDraftRequest } from \"./model-taskset-authoring-contracts.js\";\nimport { assertModelTasksetAuthoring, modelAuthoredTasksetId } from \"./model-taskset-authoring-lineage.js\";\nimport { createTasksetPackage, validateTasksetPackage, type TasksetPackage } from \"./taskset-package-contracts.js\";\nimport { createTasksetPackageExecutionFile, resolveTasksetPackageExecution } from \"./taskset-package-execution.js\";\nimport { modelStarterExecutionAssetId } from \"./model-starter-execution.js\";\nimport { deriveModelTaskset } from \"./model-taskset-derivation.js\";\nimport { publishBoundModelTasksetDraftPackage } from \"./model-bound-taskset-authoring.js\";\n\nexport * from \"./model-taskset-authoring-contracts.js\";\n\n/** Resolve under an authorized Model CAS. The host retains requestHash and the\n * preparation so retrying cannot choose newer source bytes or another draft. */\nexport function prepareModelTasksetDraft(input: { request: ModelTasksetDraftRequest; owner: { scopeId: string; modelId: string }; source: TasksetPackage }): ModelTasksetDraftPreparation {\n const request = ModelTasksetDraftRequestSchema.parse(input.request);\n const owner = ModelTasksetAuthoringOwnerSchema.parse(input.owner);\n const source = validateTasksetPackage(input.source);\n if (source.learningResources) throw new Error(\"Reviewed Tasksets require their reviewed authoring workflow.\");\n if (source.contentHash !== request.sourcePackageHash) throw new Error(\"Taskset draft source package changed.\");\n if (source.modelResources) {\n const derived = deriveModelTaskset({ owner, source: { ...source.modelResources, taskset: source.taskset, executionResources: { environment: source.environment, verifierSet: source.verifierSet } },\n rewardBinding: source.modelResources.rewardBinding, rewards: source.modelResources.rewards, assets: source.modelResources.assets });\n const lineage = derived.taskset.metadata.modelTasksetDerivation as { owner: typeof owner; root: ReturnType<typeof learningRef>; parent: ReturnType<typeof learningRef> };\n return ModelTasksetDraftPreparationSchema.parse({ schemaVersion: \"openpond.modelTasksetDraftPreparation.v1\",\n draftId: `model-taskset-draft-${contentHash({ owner, operationId: request.operationId })}`, requestHash: contentHash(request),\n sourcePackageHash: source.contentHash, sourceTasksetRef: learningRef(source.taskset), tasksetId: derived.taskset.id,\n tasksetRevision: derived.taskset.revision, lineage: { ...lineage, schemaVersion: \"openpond.modelTasksetAuthoring.v1\" }, authoringGraph: \"bound\",\n });\n }\n const previous = assertModelTasksetAuthoring(source.taskset);\n const owned = previous && contentHash(previous.owner) === contentHash(owner);\n const root = owned ? previous.root : learningRef(source.taskset);\n const lineage = { schemaVersion: \"openpond.modelTasksetAuthoring.v1\" as const, owner, root, parent: learningRef(source.taskset) };\n return ModelTasksetDraftPreparationSchema.parse({\n schemaVersion: \"openpond.modelTasksetDraftPreparation.v1\",\n draftId: `model-taskset-draft-${contentHash({ owner, operationId: request.operationId })}`,\n requestHash: contentHash(request), sourcePackageHash: source.contentHash, sourceTasksetRef: learningRef(source.taskset),\n tasksetId: modelAuthoredTasksetId(lineage), tasksetRevision: owned ? source.taskset.revision + 1 : 1, lineage,\n });\n}\n\n/** The edited package already carries exact file bytes and execution releases.\n * Seal the owned revision without copying qualification for different bytes. */\nexport function publishModelTasksetDraftPackage(input: { preparation: ModelTasksetDraftPreparation; edited: TasksetPackage; source?: TasksetPackage }): TasksetPackage {\n const prepared = ModelTasksetDraftPreparationSchema.parse(input.preparation);\n if (!sameLearningRef(prepared.sourceTasksetRef, prepared.lineage.parent)) throw new Error(\"Taskset draft preparation differs from its source lineage.\");\n if (prepared.authoringGraph === \"bound\") {\n if (!input.source) throw new Error(\"Bound Taskset authoring requires its retained source package.\");\n return publishBoundModelTasksetDraftPackage({ preparation: prepared, source: input.source, edited: input.edited });\n }\n const edited = requireOrdinaryPackage(input.edited);\n const { contentHash: _verifierHash, ...verifierContent } = edited.verifierSet;\n const verifierSet = createVerifierSetRelease({ ...verifierContent, id: `${prepared.tasksetId}-verifiers`, revision: prepared.tasksetRevision,\n calibrationReceiptRefs: [], metadata: { sourceVerifierSet: learningRef(edited.verifierSet) } });\n const { contentHash: _hash, ...content } = edited.taskset;\n const taskset = TasksetReleaseSchema.parse(sealLearningContent({ ...content, id: prepared.tasksetId, revision: prepared.tasksetRevision,\n verifierSetRelease: { id: verifierSet.id, contentHash: verifierSet.contentHash },\n metadata: {\n modelTasksetAuthoring: prepared.lineage,\n ...(edited.taskset.metadata.environmentResources === undefined ? {} : { environmentResources: edited.taskset.metadata.environmentResources }),\n ...(edited.taskset.metadata.ordinaryAuthoring === undefined ? {} : { ordinaryAuthoring: edited.taskset.metadata.ordinaryAuthoring }),\n },\n }));\n const resolved = resolveTasksetPackageExecution(edited);\n const files = resolved ? [\n ...edited.files.filter(file => file.asset.id !== modelStarterExecutionAssetId(edited.taskset)),\n createTasksetPackageExecutionFile({ ...resolved.execution, verifierSet }),\n ] : edited.files;\n return createTasksetPackage({ schemaVersion: \"openpond.tasksetPackage.v1\", taskset, environment: edited.environment, verifierSet, files });\n}\n\nfunction requireOrdinaryPackage(value: unknown) {\n const result = validateTasksetPackage(value);\n if (result.modelResources || result.learningResources) throw new Error(\"This Taskset requires its bound or reviewed authoring workflow.\");\n return result;\n}\n", "import { contentHash } from \"@openpond/harness\";\nimport { LearningTextAssetSchema, TaskDefinitionSchema, learningRef, sameLearningRef, sealLearningContent } from \"@openpond/evals/learning\";\nimport { TasksetReleaseSchema } from \"@openpond/evals/tasksets\";\nimport { ModelTasksetDerivationSchema, compileModelTasksetReward } from \"./model-taskset-derivation.js\";\nimport type { ModelTasksetDraftPreparation } from \"./model-taskset-authoring-contracts.js\";\nimport { createTasksetPackage, decodeTasksetPackageFile, resolveTasksetPackageInstructions, validateTasksetPackage, type TasksetPackage } from \"./taskset-package-contracts.js\";\nimport { resolveTasksetPackageExecution } from \"./taskset-package-execution.js\";\n\n/** Task edits retain the exact saved Reward. Changing its implementation or\n * grading policy goes through Reward publication and Model selection. */\nexport function publishBoundModelTasksetDraftPackage(input: {\n preparation: ModelTasksetDraftPreparation; source: TasksetPackage; edited: TasksetPackage;\n}): TasksetPackage {\n const source = validateTasksetPackage(input.source);\n const edited = validateTasksetPackage(input.edited);\n const prepared = input.preparation;\n if (prepared.authoringGraph !== \"bound\" || !source.modelResources || source.learningResources || edited.modelResources || edited.learningResources) throw new Error(\"Bound task editing requires its source Reward and an ordinary edited workspace.\");\n if (source.contentHash !== prepared.sourcePackageHash || !sameLearningRef(learningRef(source.taskset), prepared.sourceTasksetRef)) throw new Error(\"Bound draft differs from its retained source package.\");\n const normalizedGraders = (value: TasksetPackage) => value.taskset.graders.map(grader => grader.kind === \"custom_verifier\" ? { ...grader, exportName: grader.exportName ?? \"verify\" } : grader);\n if (contentHash(normalizedGraders(source)) !== contentHash(normalizedGraders(edited))) throw new Error(\"Edit the saved Reward in Rewards before changing this Taskset's graders.\");\n const resources = source.modelResources;\n const assets = new Map(resources.assets.map(asset => [asset.id, asset]));\n const execution = resolveTasksetPackageExecution(edited);\n const sourceExecution = resolveTasksetPackageExecution(source);\n const environmentContent = (value: TasksetPackage[\"environment\"]) => {\n const { id: _id, revision: _revision, contentHash: _hash, metadata, ...contract } = value;\n const { javascriptEnvironment: _javascript, ...retained } = metadata;\n return { ...contract, metadata: { ...retained, resources: retained.resources ?? [] } };\n };\n const javascriptContent = (value: typeof execution) => {\n if (!value) return null;\n const { id: _id, revision: _revision, contentHash: _hash, ...contract } = value.execution.javascript;\n return contract;\n };\n const unchangedEnvironment = contentHash(environmentContent(source.environment)) === contentHash(environmentContent(edited.environment))\n && contentHash(javascriptContent(sourceExecution)) === contentHash(javascriptContent(execution));\n const selectedEnvironment = unchangedEnvironment ? source.environment : edited.environment;\n const selectedExecution = unchangedEnvironment ? sourceExecution : execution;\n const requiredIds = new Set([\n ...resources.assets.map(asset => asset.id),\n ...edited.taskset.tasks.flatMap(task => task.privilegedContextRef ? [task.privilegedContextRef] : []),\n ...[edited.environment.actionSchemaRef, edited.environment.observationSchemaRef, edited.environment.stateSchemaRef].flatMap(ref => ref ? [ref.id] : []),\n ...(execution?.assets.map(asset => asset.id) ?? []),\n ]);\n for (const id of requiredIds) {\n const file = edited.files.find(file => file.asset.id === id);\n if (!file) throw new Error(`Bound Taskset asset is missing: ${id}.`);\n const text = new TextDecoder(\"utf-8\", { fatal: true }).decode(decodeTasksetPackageFile(file));\n assets.set(id, LearningTextAssetSchema.parse(sealLearningContent({ schemaVersion: \"openpond.learningTextAsset.v1\", id, revision: 1, asset: file.asset, text })));\n }\n const instructions = resolveTasksetPackageInstructions(edited);\n const { contentHash: _definitionHash, ...definitionContent } = resources.taskDefinition;\n const { policy, environment, environmentRelease, tools, capabilities, verifierSetRelease } = edited.taskset;\n const taskDefinition = TaskDefinitionSchema.parse(sealLearningContent({ ...definitionContent, instructions,\n execution: { policy, environment, environmentRelease, tools, capabilities, verifierSetRelease },\n }));\n const { contentHash: _taskHash, ...taskContent } = edited.taskset;\n const taskset = TasksetReleaseSchema.parse(sealLearningContent({ ...taskContent, tasks: edited.taskset.tasks.map(task => resources.instructionMode === \"per_task\" ? task\n : { ...task, policyVisibleContext: { ...task.policyVisibleContext, instructions } }) }));\n const derived = compileModelTasksetReward({ owner: prepared.lineage.owner,\n source: { ...resources, taskset: source.taskset, executionResources: { environment: source.environment, verifierSet: source.verifierSet } },\n rewardBinding: resources.rewardBinding, rewards: resources.rewards, assets: [...assets.values()],\n edits: { taskset, taskDefinition, executionResources: { environment: selectedEnvironment, verifierSet: edited.verifierSet }, ...(selectedExecution ? { execution: selectedExecution.execution } : {}) },\n });\n const lineage = ModelTasksetDerivationSchema.parse(derived.taskset.metadata.modelTasksetDerivation);\n if (derived.taskset.id !== prepared.tasksetId || derived.taskset.revision !== prepared.tasksetRevision\n || contentHash({ ...lineage, schemaVersion: prepared.lineage.schemaVersion }) !== contentHash(prepared.lineage)) throw new Error(\"Bound draft differs from its retained ownership lineage.\");\n const { taskset: published, executionResources, ...modelResources } = derived;\n return createTasksetPackage({ schemaVersion: \"openpond.tasksetPackage.v1\", taskset: published, ...executionResources!, modelResources, files: edited.files });\n}\n", "import { z } from \"zod\";\nimport { contentHash, ImmutableAssetRefSchema, sha256, type ImmutableAssetRef } from \"@openpond/harness\";\nimport { TasksetSchema, type GeneratedTaskFile, type Taskset } from \"./taskset-authored-contracts.js\";\nimport { computeTasksetHash } from \"./taskset-authored-validation.js\";\nimport { projectPortableTaskRecord } from \"./taskset-authored-portable-release.js\";\nimport { TasksetDraftFilePathSchema } from \"./model-taskset-authoring-contracts.js\";\nimport { MAX_TASKSET_PACKAGE_BYTES } from \"./taskset-package-files.js\";\nimport { prepareAuthoredToolEnvironment } from \"./taskset-authored-tool-environment.js\";\n\nexport const AuthoredTasksetFileInventorySchema = z.array(z.object({\n asset: ImmutableAssetRefSchema, sourcePath: z.string().min(1),\n}).strict()).max(10_000);\n\nconst GENERATED_MANIFESTS = new Set([\"taskset.json\", \"capabilities.json\", \"data/tasks.jsonl\", \"graders/graders.json\", \"fixtures/grader-fixtures.json\", \"environment/taskset.ts\"]);\nexport function isGeneratedTasksetPublicationFilePath(path: string): boolean { return GENERATED_MANIFESTS.has(path); }\n\n/** Seal one captured file population; hosts own filesystem or object-store capture. */\nexport function prepareAuthoredTasksetSource(tasksetInput: Taskset, sourceFiles: ReadonlyMap<string, Uint8Array>, adapterId: string) {\n const taskset = TasksetSchema.parse(tasksetInput);\n if (taskset.metadata.taskDefinition !== undefined || taskset.metadata.rewardBinding !== undefined) return { taskset, generatedFiles: [] as GeneratedTaskFile[] };\n const bytes = new Map<string, Uint8Array>();\n let total = 0;\n for (const [name, data] of sourceFiles) {\n TasksetDraftFilePathSchema.parse(name);\n total += data.byteLength;\n if (bytes.size >= 10_000 || total > MAX_TASKSET_PACKAGE_BYTES * 3 / 4) throw new Error(\"Taskset source exceeds the package byte limit.\");\n bytes.set(name, data.slice());\n }\n const aggregator = taskset.metrics?.customAggregator;\n const aggregatorBytes = aggregator ? bytes.get(aggregator.module) : undefined;\n if (aggregator && !aggregatorBytes) throw new Error(\"Declared Taskset metric module is missing.\");\n const metrics = aggregator && aggregatorBytes ? { ...taskset.metrics!, customAggregator: { ...aggregator, contentHash: sha256(aggregatorBytes) } } : taskset.metrics;\n const inventory = new Map<string, { asset: ImmutableAssetRef; sourcePath: string }>();\n const declaredPaths = new Set<string>();\n const generatedFiles: GeneratedTaskFile[] = [];\n const ref = (id: string, sourcePath: string, mediaType: string, visibility: ImmutableAssetRef[\"visibility\"]): ImmutableAssetRef => {\n const source = bytes.get(sourcePath);\n if (!source) throw new Error(`Declared Taskset file is missing: ${sourcePath}.`);\n return { id, path: sourcePath, contentHash: sha256(source), sizeBytes: source.byteLength, mediaType, visibility };\n };\n const add = (asset: ImmutableAssetRef, sourcePath = asset.path) => {\n const previous = inventory.get(asset.id);\n if (previous && contentHash(previous) !== contentHash({ asset, sourcePath })) throw new Error(`Conflicting Taskset file identity: ${asset.id}.`);\n const source = bytes.get(sourcePath);\n if (!source || source.length !== asset.sizeBytes || sha256(source) !== asset.contentHash) throw new Error(`Taskset file differs from its declared bytes: ${asset.id}.`);\n inventory.set(asset.id, { asset, sourcePath });\n declaredPaths.add(sourcePath);\n };\n for (const task of taskset.tasks) {\n const portable = projectPortableTaskRecord(task);\n for (const asset of portable.artifactRefs) add(asset, task.assets?.find(candidate => candidate.id === asset.id)?.artifactRef ?? asset.path);\n for (const output of portable.requiredOutputs ?? []) if (output.schemaRef) add(output.schemaRef);\n }\n for (const resource of taskset.environment.resources ?? []) add(ref(resource.id, resource.path, resource.mediaType ?? \"application/octet-stream\", resource.visibility === \"policy_visible\" ? \"policy\" : \"host_private\"));\n const graders = taskset.graders.map(grader => {\n if (grader.kind === \"custom_verifier\") {\n let asset = ref(`verifier-${grader.id}`, grader.module, \"application/javascript\", \"host_private\");\n const previous = ImmutableAssetRefSchema.safeParse(grader.metadata.portableVerifierRef);\n if (previous.success && previous.data.contentHash === asset.contentHash && previous.data.sizeBytes === asset.sizeBytes) asset = previous.data;\n add(asset, grader.module);\n return { ...grader, metadata: { ...grader.metadata, portableVerifierRef: asset } };\n }\n if (grader.kind === \"human\" || grader.kind === \"model_judge\") {\n const content = new TextEncoder().encode(grader.rubric);\n const sourcePath = `graders/rubric-${sha256(content)}.md`;\n bytes.set(sourcePath, content);\n let asset = ref(`rubric-${grader.id}`, sourcePath, \"text/markdown\", \"verifier\");\n const previous = ImmutableAssetRefSchema.safeParse(grader.metadata.portableRubricRef);\n if (previous.success && previous.data.contentHash === asset.contentHash && previous.data.sizeBytes === asset.sizeBytes) {\n if (previous.data.visibility === \"policy\") throw new Error(\"A grader rubric cannot become policy-visible.\");\n asset = previous.data;\n }\n add(asset, sourcePath);\n generatedFiles.push({ path: sourcePath, role: \"verifier\", content: grader.rubric });\n return { ...grader, metadata: { ...grader.metadata, portableRubricRef: asset } };\n }\n return grader;\n });\n if (aggregator && ![...inventory.values()].some(file => file.asset.path === aggregator.module && file.sourcePath === aggregator.module && file.asset.visibility !== \"policy\")) {\n add(ref(`metric-${contentHash(aggregator.module)}`, aggregator.module, \"application/javascript\", \"host_private\"));\n }\n // Unreferenced source files are retained privately. Only explicit task or\n // environment declarations can make bytes visible to the policy.\n const previousInventory = AuthoredTasksetFileInventorySchema.parse(taskset.metadata.portableFileInventory ?? []);\n for (const name of [...bytes.keys()].sort()) if (!declaredPaths.has(name)) {\n const previous = previousInventory.find(file => file.sourcePath === name && !inventory.has(file.asset.id));\n add(previous\n ? { ...ref(previous.asset.id, name, previous.asset.mediaType, previous.asset.visibility), path: previous.asset.path }\n : ref(`taskset-file-${contentHash(name)}`, name, \"application/octet-stream\", \"host_private\"), name);\n }\n // Publication creates a new release; imported cache and execution identities\n // describe the source revision, not the newly edited graders.\n const { importedPackageHash, derivedPortableMetadata: _derived, ...metadata } = taskset.metadata;\n const environmentMetadata = { ...taskset.environment.metadata };\n if (environmentMetadata.portableExecutionResources !== undefined) {\n const resources = z.object({ environment: z.unknown(), verifierSet: z.unknown().optional() }).parse(environmentMetadata.portableExecutionResources);\n environmentMetadata.portableExecutionResources = { environment: resources.environment };\n }\n const prepared = TasksetSchema.parse({ ...taskset, graders, metrics,\n environment: { ...taskset.environment, metadata: environmentMetadata },\n metadata: { ...metadata, ...(importedPackageHash === undefined ? {} : { sourceImportedPackageHash: importedPackageHash }), portableFileInventory: AuthoredTasksetFileInventorySchema.parse([...inventory.values()].sort((left, right) => left.asset.id.localeCompare(right.asset.id))) } });\n const executable = prepareAuthoredToolEnvironment(prepared, bytes, [...inventory.values()], adapterId);\n return { taskset: TasksetSchema.parse({ ...executable.taskset, contentHash: computeTasksetHash(executable.taskset) }), generatedFiles: [...generatedFiles, ...executable.generatedFiles] };\n}\n", "import { TasksetSchema, type GeneratedTaskFile, type Taskset } from \"./taskset-authored-contracts.js\";\nimport { createEnvironmentRelease } from \"@openpond/evals\";\nimport { JavaScriptEnvironmentDefinitionSchema } from \"@openpond/evals/javascript-environment\";\nimport { learningRef, sealLearningContent } from \"@openpond/evals/learning\";\nimport { contentHash, type ImmutableAssetRef } from \"@openpond/harness\";\nimport { computeTasksetHash } from \"./taskset-authored-validation.js\";\nimport { materializePortableTasksetRelease, portableTasksetEnvironment } from \"./taskset-authored-portable-release.js\";\nimport { ModelStarterExecutionSchema } from \"./model-starter-execution.js\";\nimport { createTasksetPackageExecutionFile } from \"./taskset-package-execution.js\";\nimport { decodeTasksetPackageFile } from \"./taskset-package-files.js\";\n\ntype Inventory = Array<{ asset: ImmutableAssetRef; sourcePath: string }>;\n\n/** Source bytes change in the draft; publication owns all executable hashes.\n * The private declaration is regenerated with the newly compiled verifiers. */\nexport function prepareAuthoredToolEnvironment(taskset: Taskset, bytes: Map<string, Uint8Array>, inventory: Inventory, adapterId: string): { taskset: Taskset; inventory: Inventory; generatedFiles: GeneratedTaskFile[] } {\n if (taskset.environment.entrypoint !== \"openpond.javascript-environment.v1\") return { taskset, inventory, generatedFiles: [] };\n const declarationPath = \"environment/execution.json\";\n const declaration = bytes.get(declarationPath);\n if (!declaration || declaration.length > 524_288) throw new Error(\"Authored tool environment requires its bounded private execution declaration.\");\n const previous = ModelStarterExecutionSchema.parse(JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(declaration)));\n const repin = (ref: ImmutableAssetRef | null): ImmutableAssetRef | null => {\n if (!ref) return null;\n const file = inventory.find(file => file.asset.id === ref.id && file.asset.path === ref.path);\n if (!file) throw new Error(`Authored environment dependency is missing: ${ref.id}.`);\n return file.asset;\n };\n const { contentHash: _javascriptHash, ...javascriptContent } = previous.javascript;\n const javascript = JavaScriptEnvironmentDefinitionSchema.parse(sealLearningContent({ ...javascriptContent,\n id: `javascript-${taskset.id}`, revision: taskset.revision, module: repin(previous.javascript.module),\n }));\n if (contentHash(javascript.tools) !== contentHash(taskset.environment.metadata.portableTools)\n || contentHash(javascript.tools.map(tool => tool.name)) !== contentHash(taskset.environment.toolNames)) throw new Error(\"Authored environment tools differ from the Taskset's declared tools.\");\n const environment = createEnvironmentRelease({ schemaVersion: \"openpond.environmentRelease.v1\", id: `environment-${taskset.id}`, revision: taskset.revision,\n contract: portableTasksetEnvironment(taskset), actionSchemaRef: repin(previous.environment.actionSchemaRef), observationSchemaRef: repin(previous.environment.observationSchemaRef), stateSchemaRef: repin(previous.environment.stateSchemaRef),\n artifactCollection: previous.environment.artifactCollection, adapterConformanceHashes: {},\n metadata: { javascriptEnvironment: learningRef(javascript), resources: taskset.environment.resources ?? [] },\n });\n const prepared = TasksetSchema.parse({ ...taskset, environment: { ...taskset.environment,\n metadata: { ...taskset.environment.metadata, portableExecutionResources: { environment } },\n } });\n const releases = materializePortableTasksetRelease({ taskset: prepared, adapterId: adapterId });\n const file = createTasksetPackageExecutionFile({ javascript, environment, verifierSet: releases.verifierSetRelease });\n const nextInventory = [...inventory.filter(entry => entry.sourcePath !== declarationPath), { asset: file.asset, sourcePath: declarationPath }];\n const finalized = TasksetSchema.parse({ ...prepared, metadata: { ...prepared.metadata, portableFileInventory: nextInventory } });\n return { taskset: TasksetSchema.parse({ ...finalized, contentHash: computeTasksetHash(finalized) }), inventory: nextInventory,\n generatedFiles: [{ path: declarationPath, role: \"environment\", content: new TextDecoder().decode(decodeTasksetPackageFile(file)) }],\n };\n}\n", "import { contentHash } from \"@openpond/harness\";\nimport { ModelTasksetDraftPreparationSchema, type ModelTasksetDraftPreparation } from \"./model-taskset-authoring-contracts.js\";\nimport { publishModelTasksetDraftPackage } from \"./model-taskset-authoring.js\";\nimport { publishTasksetDraft } from \"./taskset-draft-publication.js\";\nimport { validateTasksetDraftWorkspace, decodeTasksetDraftWorkspaceFile, type TasksetDraftWorkspace } from \"./taskset-draft-workspace.js\";\nimport { renderTasksetDraftManifests } from \"./taskset-draft-manifests.js\";\nimport { AuthoredTasksetFileInventorySchema, isGeneratedTasksetPublicationFilePath, prepareAuthoredTasksetSource } from \"./taskset-authored-files.js\";\nimport { materializePortableTasksetRelease } from \"./taskset-authored-portable-release.js\";\nimport { createTasksetPackage, type TasksetPackage } from \"./taskset-package-contracts.js\";\n\n/** Use the same validation, file pinning and release projection as Desktop.\n * Compilation neither executes models/graders nor selects the resulting release.\n * The host supplies its retained preparation and later commits Model/draft CAS. */\nexport function compileTasksetDraftWorkspace(input: {\n workspace: TasksetDraftWorkspace;\n preparation: ModelTasksetDraftPreparation | null;\n adapterId: string;\n now: string;\n source?: TasksetPackage;\n}) {\n const workspace = validateTasksetDraftWorkspace(input.workspace);\n const preparation = input.preparation === null ? null : ModelTasksetDraftPreparationSchema.parse(input.preparation);\n if (preparation ? workspace.draft.id !== preparation.draftId || workspace.draft.modelScope?.modelId !== preparation.lineage.owner.modelId\n || workspace.draft.profileId !== preparation.lineage.owner.scopeId\n || contentHash(workspace.draft.modelScope?.source ?? null) !== contentHash(preparation)\n : workspace.draft.modelScope?.source !== undefined) throw new Error(\"Taskset draft differs from its retained source preparation.\");\n // Validation and publication may happen in different requests. Package\n // identity depends on saved bytes, including their timestamp, not wall time.\n const taskset = publishTasksetDraft({ draft: workspace.draft, now: workspace.draft.updatedAt, sourcePackageHash: workspace.contentHash });\n const files = new Map(workspace.files.map(file => [file.path, decodeTasksetDraftWorkspaceFile(file)]));\n for (const [path, source] of renderTasksetDraftManifests(workspace.draft)) if (!isGeneratedTasksetPublicationFilePath(path)) files.set(path, new TextEncoder().encode(source));\n const authored = prepareAuthoredTasksetSource(taskset, files, input.adapterId);\n for (const file of authored.generatedFiles) files.set(file.path, new TextEncoder().encode(file.content));\n const releases = materializePortableTasksetRelease({ taskset: authored.taskset, adapterId: input.adapterId });\n const inventory = AuthoredTasksetFileInventorySchema.parse(authored.taskset.metadata.portableFileInventory);\n const edited = createTasksetPackage({ schemaVersion: \"openpond.tasksetPackage.v1\", taskset: releases.tasksetRelease,\n environment: releases.environmentRelease, verifierSet: releases.verifierSetRelease,\n files: inventory.map(entry => {\n const bytes = files.get(entry.sourcePath);\n if (!bytes) throw new Error(`Captured Taskset file is missing: ${entry.sourcePath}.`);\n return { asset: entry.asset, base64: Buffer.from(bytes).toString(\"base64\") };\n }),\n });\n return preparation ? publishModelTasksetDraftPackage({ preparation, edited, source: input.source }) : edited;\n}\n\n/** Model-derived authoring retains its stronger owner/source contract. */\nexport function compileModelTasksetDraftWorkspace(input: Parameters<typeof compileTasksetDraftWorkspace>[0]) {\n if (!input.workspace.draft.modelScope) throw new Error(\"Taskset draft requires a Model owner.\");\n return compileTasksetDraftWorkspace(input);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["learningRef", "sameLearningRef", "sealLearningContent", "TasksetReleaseSchema", "file", "lineage", "learningRef", "sameLearningRef", "TasksetReleaseSchema", "sealLearningContent", "learningRef", "sealLearningContent", "file", "sealLearningContent", "learningRef"]
7
7
  }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  compileTasksetDraftWorkspace
3
- } from "./chunk-DNBAJUVR.js";
3
+ } from "./chunk-6D4JIOOC.js";
4
4
  import {
5
5
  TasksetDraftWorkspaceSchema,
6
6
  validateTasksetDraftWorkspace
@@ -26,7 +26,8 @@ var DatasetWorkspaceWriteSchema = z.object({
26
26
  operationId: Id,
27
27
  expectedRevision: z.number().int().nonnegative(),
28
28
  originProjectId: Id.optional(),
29
- workspace: TasksetDraftWorkspaceSchema
29
+ workspace: TasksetDraftWorkspaceSchema,
30
+ ownerScope: z.enum(["workspace", "personal"]).optional()
30
31
  }).strict().superRefine((value, ctx) => {
31
32
  if (value.workspace.draft.modelScope !== null) ctx.addIssue({ code: "custom", message: "Independent datasets cannot carry Model-owned draft preparation." });
32
33
  if (value.workspace.draft.status !== "draft") ctx.addIssue({ code: "custom", message: "Only draft workspaces can be saved." });
@@ -38,17 +39,25 @@ var DatasetWorkspaceReceiptSchema = z.object({
38
39
  revision: z.number().int().positive(),
39
40
  originProjectId: Id.optional(),
40
41
  workspace: TasksetDraftWorkspaceSchema,
42
+ ownerScope: z.enum(["workspace", "personal"]).optional(),
41
43
  publication: z.object({ tasksetId: Id, release: TasksetCatalogReleaseRefSchema, packageHash: Hash }).strict().nullable()
42
44
  }).strict().superRefine((value, ctx) => {
43
45
  if (value.workspace.draft.id !== value.datasetId || value.workspace.draft.profileId !== value.teamId || value.workspace.draft.revision !== value.revision || value.workspace.draft.modelScope !== null) ctx.addIssue({ code: "custom", message: "Dataset workspace scope/revision mismatch." });
44
46
  });
45
47
  var DatasetWorkspacePublishSchema = z.object({ operationId: Id, expectedRevision: z.number().int().positive(), workspaceHash: Hash, packageHash: Hash }).strict();
48
+ var DatasetWorkspaceBeginVersionSchema = z.object({ operationId: Id, expectedRevision: z.number().int().positive() }).strict();
49
+ var DatasetWorkspaceVersionsSchema = z.object({ teamId: Id, datasetId: Id, items: z.array(z.object({
50
+ workspaceRevision: z.number().int().positive(),
51
+ publication: DatasetWorkspaceReceiptSchema.shape.publication.unwrap(),
52
+ publishedAt: z.iso.datetime()
53
+ }).strict()).max(25), nextBeforeRevision: z.number().int().positive().nullable() }).strict();
46
54
  var DatasetWorkspaceListSchema = z.object({ teamId: Id, datasets: z.array(z.object({
47
55
  id: Id,
48
56
  revision: z.number().int().positive(),
49
57
  originProjectId: Id.optional(),
50
58
  name: z.string(),
51
59
  status: z.enum(["draft", "published"]),
60
+ ownerScope: z.enum(["workspace", "personal"]).optional(),
52
61
  publication: DatasetWorkspaceReceiptSchema.shape.publication,
53
62
  updatedAt: z.string().datetime()
54
63
  }).strict()).max(100), nextCursor: Id.nullable() }).strict();
@@ -72,12 +81,30 @@ var OpenPondDatasetWorkspaceClient = class {
72
81
  async get(id, signal) {
73
82
  return this.readback(await this.request(`/${encodeURIComponent(id)}`, "GET", void 0, signal), id);
74
83
  }
84
+ async beginVersion(id, input, signal) {
85
+ const request = DatasetWorkspaceBeginVersionSchema.parse(input);
86
+ const result = this.readback(await this.request(`/${encodeURIComponent(id)}/begin-version`, "POST", request, signal), id);
87
+ if (result.revision !== request.expectedRevision + 1 || result.workspace.draft.status !== "draft" || !result.publication || !result.workspace.draft.publishedTasksetRef) throw new Error("Editable version receipt mismatch.");
88
+ return result;
89
+ }
90
+ async versions(id, options = {}) {
91
+ const query = new URLSearchParams(options.beforeRevision === void 0 ? {} : { beforeRevision: String(options.beforeRevision) });
92
+ const result = DatasetWorkspaceVersionsSchema.parse(await this.request(`/${encodeURIComponent(id)}/versions?${query}`, "GET", void 0, options.signal));
93
+ if (result.teamId !== this.options.teamId || result.datasetId !== id || result.items.some((item, index) => index > 0 && item.workspaceRevision >= result.items[index - 1].workspaceRevision || options.beforeRevision !== void 0 && item.workspaceRevision >= options.beforeRevision)) throw new Error("Dataset version history scope/order mismatch.");
94
+ return result;
95
+ }
96
+ async version(id, workspaceRevision, signal) {
97
+ const result = this.readback(await this.request(`/${encodeURIComponent(id)}/versions/${workspaceRevision}`, "GET", void 0, signal), id);
98
+ if (result.revision !== workspaceRevision || result.workspace.draft.status !== "published") throw new Error("Dataset immutable version mismatch.");
99
+ return result;
100
+ }
75
101
  async save(input, signal) {
76
102
  const request = DatasetWorkspaceWriteSchema.parse(input);
77
103
  const workspace = validateTasksetDraftWorkspace(request.workspace);
78
104
  if (workspace.draft.profileId !== this.options.teamId || workspace.draft.revision !== request.expectedRevision + 1) throw new Error("Dataset write scope or revision mismatch.");
79
105
  const result = this.readback(await this.request(`/${encodeURIComponent(workspace.draft.id)}`, "PUT", request, signal), workspace.draft.id);
80
106
  if (request.originProjectId && result.originProjectId !== request.originProjectId) throw new Error("Dataset origin Project mismatch.");
107
+ if (request.ownerScope && result.ownerScope !== request.ownerScope) throw new Error("Dataset owner scope mismatch.");
81
108
  if (result.workspace.contentHash !== workspace.contentHash) throw new Error("Dataset write receipt differs from the saved bytes.");
82
109
  return result;
83
110
  }
@@ -111,10 +138,12 @@ var OpenPondDatasetWorkspaceClient = class {
111
138
  }
112
139
  };
113
140
  export {
141
+ DatasetWorkspaceBeginVersionSchema,
114
142
  DatasetWorkspaceListSchema,
115
143
  DatasetWorkspacePublishSchema,
116
144
  DatasetWorkspaceReceiptSchema,
117
145
  DatasetWorkspaceValidationSchema,
146
+ DatasetWorkspaceVersionsSchema,
118
147
  DatasetWorkspaceWriteSchema,
119
148
  OpenPondDatasetWorkspaceClient,
120
149
  compileTasksetDraftWorkspace
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/dataset-workspace-contracts.ts", "../src/dataset-workspace-client.ts"],
4
- "sourcesContent": ["import { z } from \"zod\";\nimport { TasksetDraftWorkspaceSchema } from \"./taskset-draft-workspace.js\";\nimport { TasksetCatalogReleaseRefSchema } from \"./taskset-catalog.js\";\nexport { compileTasksetDraftWorkspace } from \"./taskset-draft-package-compiler.js\";\n\nconst Id = z.string().trim().min(1).max(240);\nconst Hash = z.string().regex(/^[a-f0-9]{64}$/);\nexport const DatasetWorkspaceWriteSchema = z.object({\n operationId: Id, expectedRevision: z.number().int().nonnegative(), originProjectId: Id.optional(), workspace: TasksetDraftWorkspaceSchema,\n}).strict().superRefine((value, ctx) => {\n if (value.workspace.draft.modelScope !== null) ctx.addIssue({ code: \"custom\", message: \"Independent datasets cannot carry Model-owned draft preparation.\" });\n if (value.workspace.draft.status !== \"draft\") ctx.addIssue({ code: \"custom\", message: \"Only draft workspaces can be saved.\" });\n});\nexport const DatasetWorkspaceReceiptSchema = z.object({\n schemaVersion: z.literal(\"openpond.datasetWorkspaceReceipt.v1\"), teamId: Id, datasetId: Id,\n revision: z.number().int().positive(), originProjectId: Id.optional(), workspace: TasksetDraftWorkspaceSchema,\n publication: z.object({ tasksetId: Id, release: TasksetCatalogReleaseRefSchema, packageHash: Hash }).strict().nullable(),\n}).strict().superRefine((value, ctx) => {\n if (value.workspace.draft.id !== value.datasetId || value.workspace.draft.profileId !== value.teamId || value.workspace.draft.revision !== value.revision || value.workspace.draft.modelScope !== null) ctx.addIssue({ code: \"custom\", message: \"Dataset workspace scope/revision mismatch.\" });\n});\nexport const DatasetWorkspacePublishSchema = z.object({ operationId: Id, expectedRevision: z.number().int().positive(), workspaceHash: Hash, packageHash: Hash }).strict();\nexport type DatasetWorkspaceReceipt = z.infer<typeof DatasetWorkspaceReceiptSchema>;\n\nexport const DatasetWorkspaceListSchema = z.object({ teamId: Id, datasets: z.array(z.object({\n id: Id, revision: z.number().int().positive(), originProjectId: Id.optional(), name: z.string(), status: z.enum([\"draft\", \"published\"]),\n publication: DatasetWorkspaceReceiptSchema.shape.publication, updatedAt: z.string().datetime(),\n}).strict()).max(100), nextCursor: Id.nullable() }).strict();\nexport const DatasetWorkspaceValidationSchema = z.object({ teamId: Id, datasetId: Id, revision: z.number().int().positive(), workspaceHash: Hash, packageHash: Hash, release: TasksetCatalogReleaseRefSchema }).strict();\n", "import { DatasetWorkspaceListSchema, DatasetWorkspacePublishSchema, DatasetWorkspaceReceiptSchema, DatasetWorkspaceValidationSchema, DatasetWorkspaceWriteSchema } from \"./dataset-workspace-contracts.js\";\nimport { validateTasksetDraftWorkspace } from \"./taskset-draft-workspace.js\";\nimport type { z } from \"zod\";\n\n/** Hosted independent authoring. Writes use explicit revision/operation identity;\n * callers retain the operation ID when retrying an uncertain response. */\nexport class OpenPondDatasetWorkspaceClient {\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 = DatasetWorkspaceListSchema.parse(await this.request(`?${new URLSearchParams(options.cursor ? { cursor: options.cursor } : {})}`, \"GET\", undefined, options.signal));\n if (result.teamId !== this.options.teamId) throw new Error(\"Dataset 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: z.input<typeof DatasetWorkspaceWriteSchema>, signal?: AbortSignal) {\n const request = DatasetWorkspaceWriteSchema.parse(input);\n const workspace = validateTasksetDraftWorkspace(request.workspace);\n if (workspace.draft.profileId !== this.options.teamId || workspace.draft.revision !== request.expectedRevision + 1) throw new Error(\"Dataset write scope or revision mismatch.\");\n const result = this.readback(await this.request(`/${encodeURIComponent(workspace.draft.id)}`, \"PUT\", request, signal), workspace.draft.id);\n if (request.originProjectId && result.originProjectId !== request.originProjectId) throw new Error(\"Dataset origin Project mismatch.\");\n if (result.workspace.contentHash !== workspace.contentHash) throw new Error(\"Dataset write receipt differs from the saved bytes.\");\n return result;\n }\n async validate(id: string, expectedRevision: number, signal?: AbortSignal) {\n const result = DatasetWorkspaceValidationSchema.parse(await this.request(`/${encodeURIComponent(id)}/validate`, \"POST\", { expectedRevision }, signal));\n if (result.teamId !== this.options.teamId || result.datasetId !== id || result.revision !== expectedRevision) throw new Error(\"Dataset validation receipt mismatch.\");\n return result;\n }\n async publish(id: string, input: z.input<typeof DatasetWorkspacePublishSchema>, signal?: AbortSignal) {\n const request = DatasetWorkspacePublishSchema.parse(input);\n const result = this.readback(await this.request(`/${encodeURIComponent(id)}/publish`, \"POST\", request, signal), id);\n if (result.revision !== request.expectedRevision + 1 || result.workspace.draft.status !== \"published\" || result.publication?.packageHash !== request.packageHash) throw new Error(\"Dataset publication receipt mismatch.\");\n return result;\n }\n private readback(value: unknown, id: string) {\n const result = DatasetWorkspaceReceiptSchema.parse(value);\n validateTasksetDraftWorkspace(result.workspace);\n if (result.datasetId !== id || result.teamId !== this.options.teamId) throw new Error(\"Dataset 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/dataset-workspaces${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(`Dataset request failed (${response.status}).`);\n return response.json();\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { z } from \"zod\";\nimport { TasksetDraftWorkspaceSchema } from \"./taskset-draft-workspace.js\";\nimport { TasksetCatalogReleaseRefSchema } from \"./taskset-catalog.js\";\nexport { compileTasksetDraftWorkspace } from \"./taskset-draft-package-compiler.js\";\n\nconst Id = z.string().trim().min(1).max(240);\nconst Hash = z.string().regex(/^[a-f0-9]{64}$/);\nexport const DatasetWorkspaceWriteSchema = z.object({\n operationId: Id, expectedRevision: z.number().int().nonnegative(), originProjectId: Id.optional(), workspace: TasksetDraftWorkspaceSchema,\n ownerScope: z.enum([\"workspace\", \"personal\"]).optional(),\n}).strict().superRefine((value, ctx) => {\n if (value.workspace.draft.modelScope !== null) ctx.addIssue({ code: \"custom\", message: \"Independent datasets cannot carry Model-owned draft preparation.\" });\n if (value.workspace.draft.status !== \"draft\") ctx.addIssue({ code: \"custom\", message: \"Only draft workspaces can be saved.\" });\n});\nexport const DatasetWorkspaceReceiptSchema = z.object({\n schemaVersion: z.literal(\"openpond.datasetWorkspaceReceipt.v1\"), teamId: Id, datasetId: Id,\n revision: z.number().int().positive(), originProjectId: Id.optional(), workspace: TasksetDraftWorkspaceSchema,\n ownerScope: z.enum([\"workspace\", \"personal\"]).optional(),\n publication: z.object({ tasksetId: Id, release: TasksetCatalogReleaseRefSchema, packageHash: Hash }).strict().nullable(),\n}).strict().superRefine((value, ctx) => {\n if (value.workspace.draft.id !== value.datasetId || value.workspace.draft.profileId !== value.teamId || value.workspace.draft.revision !== value.revision || value.workspace.draft.modelScope !== null) ctx.addIssue({ code: \"custom\", message: \"Dataset workspace scope/revision mismatch.\" });\n});\nexport const DatasetWorkspacePublishSchema = z.object({ operationId: Id, expectedRevision: z.number().int().positive(), workspaceHash: Hash, packageHash: Hash }).strict();\nexport const DatasetWorkspaceBeginVersionSchema = z.object({ operationId: Id, expectedRevision: z.number().int().positive() }).strict();\nexport const DatasetWorkspaceVersionsSchema = z.object({ teamId: Id, datasetId: Id, items: z.array(z.object({\n workspaceRevision: z.number().int().positive(), publication: DatasetWorkspaceReceiptSchema.shape.publication.unwrap(), publishedAt: z.iso.datetime(),\n}).strict()).max(25), nextBeforeRevision: z.number().int().positive().nullable() }).strict();\nexport type DatasetWorkspaceReceipt = z.infer<typeof DatasetWorkspaceReceiptSchema>;\n\nexport const DatasetWorkspaceListSchema = z.object({ teamId: Id, datasets: z.array(z.object({\n id: Id, revision: z.number().int().positive(), originProjectId: Id.optional(), name: z.string(), status: z.enum([\"draft\", \"published\"]),\n ownerScope: z.enum([\"workspace\", \"personal\"]).optional(),\n publication: DatasetWorkspaceReceiptSchema.shape.publication, updatedAt: z.string().datetime(),\n}).strict()).max(100), nextCursor: Id.nullable() }).strict();\nexport const DatasetWorkspaceValidationSchema = z.object({ teamId: Id, datasetId: Id, revision: z.number().int().positive(), workspaceHash: Hash, packageHash: Hash, release: TasksetCatalogReleaseRefSchema }).strict();\n", "import { DatasetWorkspaceBeginVersionSchema, DatasetWorkspaceVersionsSchema, DatasetWorkspaceListSchema, DatasetWorkspacePublishSchema, DatasetWorkspaceReceiptSchema, DatasetWorkspaceValidationSchema, DatasetWorkspaceWriteSchema } from \"./dataset-workspace-contracts.js\";\nimport { validateTasksetDraftWorkspace } from \"./taskset-draft-workspace.js\";\nimport type { z } from \"zod\";\n\n/** Hosted independent authoring. Writes use explicit revision/operation identity;\n * callers retain the operation ID when retrying an uncertain response. */\nexport class OpenPondDatasetWorkspaceClient {\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 = DatasetWorkspaceListSchema.parse(await this.request(`?${new URLSearchParams(options.cursor ? { cursor: options.cursor } : {})}`, \"GET\", undefined, options.signal));\n if (result.teamId !== this.options.teamId) throw new Error(\"Dataset 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 beginVersion(id: string, input: z.input<typeof DatasetWorkspaceBeginVersionSchema>, signal?: AbortSignal) {\n const request = DatasetWorkspaceBeginVersionSchema.parse(input);\n const result = this.readback(await this.request(`/${encodeURIComponent(id)}/begin-version`, \"POST\", request, signal), id);\n if (result.revision !== request.expectedRevision + 1 || result.workspace.draft.status !== \"draft\" || !result.publication || !result.workspace.draft.publishedTasksetRef) throw new Error(\"Editable version receipt mismatch.\");\n return result;\n }\n async versions(id: string, options: { beforeRevision?: number; signal?: AbortSignal } = {}) {\n const query = new URLSearchParams(options.beforeRevision === undefined ? {} : { beforeRevision: String(options.beforeRevision) });\n const result = DatasetWorkspaceVersionsSchema.parse(await this.request(`/${encodeURIComponent(id)}/versions?${query}`, \"GET\", undefined, options.signal));\n if (result.teamId !== this.options.teamId || result.datasetId !== id || result.items.some((item, index) => (index > 0 && item.workspaceRevision >= result.items[index - 1]!.workspaceRevision) || (options.beforeRevision !== undefined && item.workspaceRevision >= options.beforeRevision))) throw new Error(\"Dataset version history scope/order mismatch.\");\n return result;\n }\n async version(id: string, workspaceRevision: number, signal?: AbortSignal) {\n const result = this.readback(await this.request(`/${encodeURIComponent(id)}/versions/${workspaceRevision}`, \"GET\", undefined, signal), id);\n if (result.revision !== workspaceRevision || result.workspace.draft.status !== \"published\") throw new Error(\"Dataset immutable version mismatch.\");\n return result;\n }\n async save(input: z.input<typeof DatasetWorkspaceWriteSchema>, signal?: AbortSignal) {\n const request = DatasetWorkspaceWriteSchema.parse(input);\n const workspace = validateTasksetDraftWorkspace(request.workspace);\n if (workspace.draft.profileId !== this.options.teamId || workspace.draft.revision !== request.expectedRevision + 1) throw new Error(\"Dataset write scope or revision mismatch.\");\n const result = this.readback(await this.request(`/${encodeURIComponent(workspace.draft.id)}`, \"PUT\", request, signal), workspace.draft.id);\n if (request.originProjectId && result.originProjectId !== request.originProjectId) throw new Error(\"Dataset origin Project mismatch.\");\n if (request.ownerScope && result.ownerScope !== request.ownerScope) throw new Error(\"Dataset owner scope mismatch.\");\n if (result.workspace.contentHash !== workspace.contentHash) throw new Error(\"Dataset write receipt differs from the saved bytes.\");\n return result;\n }\n async validate(id: string, expectedRevision: number, signal?: AbortSignal) {\n const result = DatasetWorkspaceValidationSchema.parse(await this.request(`/${encodeURIComponent(id)}/validate`, \"POST\", { expectedRevision }, signal));\n if (result.teamId !== this.options.teamId || result.datasetId !== id || result.revision !== expectedRevision) throw new Error(\"Dataset validation receipt mismatch.\");\n return result;\n }\n async publish(id: string, input: z.input<typeof DatasetWorkspacePublishSchema>, signal?: AbortSignal) {\n const request = DatasetWorkspacePublishSchema.parse(input);\n const result = this.readback(await this.request(`/${encodeURIComponent(id)}/publish`, \"POST\", request, signal), id);\n if (result.revision !== request.expectedRevision + 1 || result.workspace.draft.status !== \"published\" || result.publication?.packageHash !== request.packageHash) throw new Error(\"Dataset publication receipt mismatch.\");\n return result;\n }\n private readback(value: unknown, id: string) {\n const result = DatasetWorkspaceReceiptSchema.parse(value);\n validateTasksetDraftWorkspace(result.workspace);\n if (result.datasetId !== id || result.teamId !== this.options.teamId) throw new Error(\"Dataset 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/dataset-workspaces${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(`Dataset request failed (${response.status}).`);\n return response.json();\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -29,9 +29,40 @@ import {
29
29
  import "./chunk-TCHAWJMB.js";
30
30
  import "./chunk-3KXDH6OB.js";
31
31
  import "./chunk-Y4NGWGTA.js";
32
- import "./chunk-QUOW6URQ.js";
32
+ import {
33
+ contentHash
34
+ } from "./chunk-QUOW6URQ.js";
35
+
36
+ // src/experiment-inspection.ts
37
+ import { z } from "zod";
38
+ var Id = z.string().trim().min(1).max(500);
39
+ var Hash = z.string().regex(/^[a-f0-9]{64}$/);
40
+ var Content = z.object({ schemaVersion: z.literal("openpond.experimentCaseInspection.v1"), teamId: Id, executionId: Id, manifestHash: Hash, receiptId: Id, taskId: Id, seed: z.string().min(1), input: z.record(z.string(), z.unknown()).nullable(), output: z.unknown().nullable(), error: z.string().nullable(), events: z.array(z.record(z.string(), z.unknown())).max(25), nextEventCursor: Id.nullable(), eventCount: z.number().int().nonnegative() }).strict();
41
+ var ExperimentCaseInspectionSchema = Content.extend({ contentHash: Hash }).strict();
42
+ var OpenPondExperimentInspectionClient = class {
43
+ constructor(options) {
44
+ this.options = options;
45
+ const url = new URL(options.baseUrl);
46
+ 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.");
47
+ this.baseUrl = url.toString().replace(/\/+$/, "");
48
+ }
49
+ options;
50
+ baseUrl;
51
+ /** Retained, policy-facing evidence only. Reading a page never dispatches. */
52
+ async case(executionId, receiptId, options = {}) {
53
+ const params = new URLSearchParams(options.afterId ? { afterId: Id.parse(options.afterId) } : {});
54
+ const response = await (this.options.fetch ?? fetch)(`${this.baseUrl}/v1/experiments/executions/${encodeURIComponent(Id.parse(executionId))}/cases/${encodeURIComponent(Id.parse(receiptId))}?${params}`, { signal: options.signal, redirect: "error", headers: { Authorization: `Bearer ${this.options.apiKey}`, "X-OpenPond-Team-Id": this.options.teamId, Accept: "application/json" } });
55
+ const value = await response.json();
56
+ if (!response.ok) throw new Error(z.object({ message: z.string() }).parse(value).message);
57
+ const result = ExperimentCaseInspectionSchema.parse(value);
58
+ const { contentHash: actual, ...content } = result;
59
+ if (contentHash(content) !== actual || result.teamId !== this.options.teamId || result.executionId !== executionId || result.receiptId !== receiptId || options.manifestHash && result.manifestHash !== options.manifestHash || result.events.length > result.eventCount) throw new Error("Case inspection differs from its requested workspace, execution or retained content.");
60
+ return result;
61
+ }
62
+ };
33
63
  export {
34
64
  ExperimentAttemptGradeSchema,
65
+ ExperimentCaseInspectionSchema,
35
66
  ExperimentDefinitionRefSchema,
36
67
  ExperimentDefinitionSchema,
37
68
  ExperimentExecutionContextSchema,
@@ -44,6 +75,7 @@ export {
44
75
  ExperimentScoringRequestSchema,
45
76
  HarnessExperimentPolicySchema,
46
77
  OpenPondExperimentError,
78
+ OpenPondExperimentInspectionClient,
47
79
  OpenPondExperimentsClient,
48
80
  PrepareHarnessExperimentSchema,
49
81
  PreparedHarnessExperimentSchema,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [],
4
- "sourcesContent": [],
5
- "mappings": "",
3
+ "sources": ["../src/experiment-inspection.ts"],
4
+ "sourcesContent": ["import { z } from \"zod\";\nimport { contentHash } from \"@openpond/harness\";\nconst Id = z.string().trim().min(1).max(500);\nconst Hash = z.string().regex(/^[a-f0-9]{64}$/);\nconst Content = z.object({ schemaVersion: z.literal(\"openpond.experimentCaseInspection.v1\"), teamId: Id, executionId: Id, manifestHash: Hash, receiptId: Id, taskId: Id, seed: z.string().min(1), input: z.record(z.string(), z.unknown()).nullable(), output: z.unknown().nullable(), error: z.string().nullable(), events: z.array(z.record(z.string(), z.unknown())).max(25), nextEventCursor: Id.nullable(), eventCount: z.number().int().nonnegative() }).strict();\nexport const ExperimentCaseInspectionSchema = Content.extend({ contentHash: Hash }).strict();\nexport type ExperimentCaseInspection = z.infer<typeof ExperimentCaseInspectionSchema>;\nexport class OpenPondExperimentInspectionClient {\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 /** Retained, policy-facing evidence only. Reading a page never dispatches. */\n async case(executionId: string, receiptId: string, options: { manifestHash?: string; afterId?: string; signal?: AbortSignal } = {}) {\n const params = new URLSearchParams(options.afterId ? { afterId: Id.parse(options.afterId) } : {});\n const response = await (this.options.fetch ?? fetch)(`${this.baseUrl}/v1/experiments/executions/${encodeURIComponent(Id.parse(executionId))}/cases/${encodeURIComponent(Id.parse(receiptId))}?${params}`, { signal: options.signal, redirect: \"error\", headers: { Authorization: `Bearer ${this.options.apiKey}`, \"X-OpenPond-Team-Id\": this.options.teamId, Accept: \"application/json\" } });\n const value: unknown = await response.json();\n if (!response.ok) throw new Error(z.object({ message: z.string() }).parse(value).message);\n const result = ExperimentCaseInspectionSchema.parse(value);\n const { contentHash: actual, ...content } = result;\n if (contentHash(content) !== actual || result.teamId !== this.options.teamId || result.executionId !== executionId || result.receiptId !== receiptId || options.manifestHash && result.manifestHash !== options.manifestHash || result.events.length > result.eventCount) throw new Error(\"Case inspection differs from its requested workspace, execution or retained content.\");\n return result;\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,SAAS;AAElB,IAAM,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAC3C,IAAM,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB;AAC9C,IAAM,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,sCAAsC,GAAG,QAAQ,IAAI,aAAa,IAAI,cAAc,MAAM,WAAW,IAAI,QAAQ,IAAI,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,EAAE,SAAS,GAAG,QAAQ,EAAE,QAAQ,EAAE,SAAS,GAAG,OAAO,EAAE,OAAO,EAAE,SAAS,GAAG,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,iBAAiB,GAAG,SAAS,GAAG,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,OAAO;AAC/b,IAAM,iCAAiC,QAAQ,OAAO,EAAE,aAAa,KAAK,CAAC,EAAE,OAAO;AAEpF,IAAM,qCAAN,MAAyC;AAAA,EAE9C,YAA6B,SAAoF;AAApF;AAC3B,UAAM,MAAM,IAAI,IAAI,QAAQ,OAAO;AACnC,QAAI,CAAC,CAAC,SAAS,QAAQ,EAAE,SAAS,IAAI,QAAQ,KAAK,IAAI,YAAY,IAAI,YAAY,IAAI,UAAU,IAAI,QAAQ,CAAC,QAAQ,OAAO,KAAK,KAAK,CAAC,QAAQ,OAAO,KAAK,EAAG,OAAM,IAAI,MAAM,4DAA4D;AAC3O,SAAK,UAAU,IAAI,SAAS,EAAE,QAAQ,QAAQ,EAAE;AAAA,EAClD;AAAA,EAJ6B;AAAA,EADZ;AAAA;AAAA,EAOjB,MAAM,KAAK,aAAqB,WAAmB,UAA6E,CAAC,GAAG;AAClI,UAAM,SAAS,IAAI,gBAAgB,QAAQ,UAAU,EAAE,SAAS,GAAG,MAAM,QAAQ,OAAO,EAAE,IAAI,CAAC,CAAC;AAChG,UAAM,WAAW,OAAO,KAAK,QAAQ,SAAS,OAAO,GAAG,KAAK,OAAO,8BAA8B,mBAAmB,GAAG,MAAM,WAAW,CAAC,CAAC,UAAU,mBAAmB,GAAG,MAAM,SAAS,CAAC,CAAC,IAAI,MAAM,IAAI,EAAE,QAAQ,QAAQ,QAAQ,UAAU,SAAS,SAAS,EAAE,eAAe,UAAU,KAAK,QAAQ,MAAM,IAAI,sBAAsB,KAAK,QAAQ,QAAQ,QAAQ,mBAAmB,EAAE,CAAC;AAC3X,UAAM,QAAiB,MAAM,SAAS,KAAK;AAC3C,QAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,EAAE,OAAO;AACxF,UAAM,SAAS,+BAA+B,MAAM,KAAK;AACzD,UAAM,EAAE,aAAa,QAAQ,GAAG,QAAQ,IAAI;AAC5C,QAAI,YAAY,OAAO,MAAM,UAAU,OAAO,WAAW,KAAK,QAAQ,UAAU,OAAO,gBAAgB,eAAe,OAAO,cAAc,aAAa,QAAQ,gBAAgB,OAAO,iBAAiB,QAAQ,gBAAgB,OAAO,OAAO,SAAS,OAAO,WAAY,OAAM,IAAI,MAAM,sFAAsF;AAChX,WAAO;AAAA,EACT;AACF;",
6
6
  "names": []
7
7
  }
package/dist/learning.js CHANGED
@@ -145,7 +145,61 @@ function hostedLearningPolicyReferences(project) {
145
145
  retentionEvaluation: { id: setup.evaluationTasksetRef.id, contentHash: setup.evaluationTasksetRef.contentHash }
146
146
  };
147
147
  }
148
+
149
+ // src/grader-inspection.ts
150
+ import { z } from "zod";
151
+ import { RewardReleaseSchema } from "@openpond/evals/rewards";
152
+ var Id = z.string().trim().min(1).max(240);
153
+ var GraderCatalogQuerySchema = z.object({ projectId: Id.optional(), search: z.string().max(300).optional(), kind: z.string().max(100).optional(), sort: z.enum(["name", "type", "version", "projects", "datasets", "runs"]).optional(), direction: z.enum(["asc", "desc"]).optional(), after: z.string().max(3e3).optional(), limit: z.number().int().min(1).max(100).default(30) }).strict();
154
+ var GraderCatalogPageSchema = z.object({ teamId: Id, items: z.array(z.object({ reward: RewardReleaseSchema, projects: z.number().int().nonnegative(), datasets: z.number().int().nonnegative(), runs: z.number().int().nonnegative() }).strict()).max(100), nextCursor: z.string().nullable() }).strict();
155
+ var GraderVersionsPageSchema = z.object({ teamId: Id, id: Id, items: z.array(RewardReleaseSchema).max(100), nextRevision: z.number().int().positive().nullable() }).strict();
156
+ var GraderUsageQuerySchema = z.object({ section: z.enum(["projects", "datasets", "runs"]), after: Id.optional(), limit: z.number().int().min(1).max(100).default(25) }).strict();
157
+ var GraderUsagePageSchema = z.object({ teamId: Id, id: Id, section: GraderUsageQuerySchema.shape.section, items: z.array(z.union([
158
+ z.object({ id: Id, name: z.string(), graderRevisions: z.array(z.number().int().positive()), archived: z.boolean() }).strict(),
159
+ z.object({ id: Id, name: z.string(), revision: z.number().int().positive(), graderRevisions: z.array(z.number().int().positive()) }).strict(),
160
+ z.object({ id: Id, name: z.string(), status: z.string() }).strict()
161
+ ])).max(100), nextCursor: Id.nullable() }).strict();
162
+ var OpenPondGraderInspectionClient = class {
163
+ constructor(options) {
164
+ this.options = options;
165
+ const url = new URL(options.baseUrl);
166
+ 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.");
167
+ this.baseUrl = url.toString().replace(/\/+$/, "");
168
+ }
169
+ options;
170
+ baseUrl;
171
+ async catalog(value = {}, signal) {
172
+ const query = GraderCatalogQuerySchema.parse(value);
173
+ const page = GraderCatalogPageSchema.parse(await this.read("", query, signal));
174
+ if (page.teamId !== this.options.teamId || page.items.length > query.limit || new Set(page.items.map((item) => item.reward.id)).size !== page.items.length) throw new Error("Grader catalog differs from its requested workspace or bounds.");
175
+ return page;
176
+ }
177
+ async versions(id, query = {}, signal) {
178
+ const options = z.object({ beforeRevision: z.number().int().positive().optional(), limit: z.number().int().min(1).max(100).default(25) }).strict().parse(query);
179
+ const page = GraderVersionsPageSchema.parse(await this.read(`/${encodeURIComponent(Id.parse(id))}/versions`, options, signal));
180
+ if (page.teamId !== this.options.teamId || page.id !== id || page.items.length > options.limit || page.items.some((item, index) => item.id !== id || options.beforeRevision && item.revision >= options.beforeRevision || index > 0 && item.revision >= page.items[index - 1].revision)) throw new Error("Grader versions differ from their requested identity or revision order.");
181
+ return page;
182
+ }
183
+ async usage(id, value, signal) {
184
+ const query = GraderUsageQuerySchema.parse(value);
185
+ const page = GraderUsagePageSchema.parse(await this.read(`/${encodeURIComponent(Id.parse(id))}/usage`, query, signal));
186
+ if (page.teamId !== this.options.teamId || page.id !== id || page.section !== query.section || page.items.length > query.limit) throw new Error("Grader usage differs from its requested workspace, identity or bounds.");
187
+ return page;
188
+ }
189
+ async read(path, query, signal) {
190
+ const params = new URLSearchParams(Object.entries(query).filter(([, value2]) => value2 !== void 0).map(([key, value2]) => [key, String(value2)]));
191
+ const response = await (this.options.fetch ?? fetch)(`${this.baseUrl}/v1/learning/read/graders${path}?${params}`, { signal, redirect: "error", headers: { Authorization: `Bearer ${this.options.apiKey}`, "X-OpenPond-Team-Id": this.options.teamId, Accept: "application/json" } });
192
+ const value = await response.json();
193
+ if (!response.ok) throw new Error(z.object({ error: z.string() }).parse(value).error);
194
+ return value;
195
+ }
196
+ };
148
197
  export {
198
+ GraderCatalogPageSchema,
199
+ GraderCatalogQuerySchema,
200
+ GraderUsagePageSchema,
201
+ GraderUsageQuerySchema,
202
+ GraderVersionsPageSchema,
149
203
  LearningBatchPublicationResultSchema,
150
204
  LearningBatchPublicationSchema,
151
205
  LearningSourceConfigurationRequestSchema,
@@ -155,6 +209,7 @@ export {
155
209
  LearningSourceCredentialRequestSchema,
156
210
  LearningSourceCredentialSchema,
157
211
  LearningSourceCredentialSecretSchema,
212
+ OpenPondGraderInspectionClient,
158
213
  OpenPondLearningClient,
159
214
  OpenPondLearningError,
160
215
  assertLearningCredentialExpiry,