openpond-sdk 0.6.7 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/MODEL_STARTERS.md +25 -0
  2. package/TASKSETS.md +8 -0
  3. package/dist/{chunk-EJYSXE4V.js → chunk-32H2EJRA.js} +292 -456
  4. package/dist/chunk-32H2EJRA.js.map +7 -0
  5. package/dist/chunk-3HV3G6DG.js +95 -0
  6. package/dist/chunk-3HV3G6DG.js.map +7 -0
  7. package/dist/{chunk-FPOW5PU7.js → chunk-CGIMLZE5.js} +7 -7
  8. package/dist/chunk-DNBAJUVR.js +380 -0
  9. package/dist/chunk-DNBAJUVR.js.map +7 -0
  10. package/dist/{chunk-YGCHXNPI.js → chunk-DT7FRNIZ.js} +3 -94
  11. package/dist/{chunk-YGCHXNPI.js.map → chunk-DT7FRNIZ.js.map} +4 -4
  12. package/dist/{chunk-ECTMEJ5N.js → chunk-IKTZ2CD4.js} +63 -42
  13. package/dist/chunk-IKTZ2CD4.js.map +7 -0
  14. package/dist/{chunk-DNEPLQXN.js → chunk-KYCQ7LZ4.js} +5 -5
  15. package/dist/{chunk-TXQHWOFM.js → chunk-LGEF4S5I.js} +2 -2
  16. package/dist/chunk-QABCKPW6.js +171 -0
  17. package/dist/chunk-QABCKPW6.js.map +7 -0
  18. package/dist/{chunk-42YOB36J.js → chunk-WOPM32SE.js} +7 -7
  19. package/dist/{chunk-EAEYAU4R.js → chunk-Y4NGWGTA.js} +23 -2
  20. package/dist/{chunk-EAEYAU4R.js.map → chunk-Y4NGWGTA.js.map} +4 -4
  21. package/dist/dataset-workspaces.js +122 -0
  22. package/dist/dataset-workspaces.js.map +7 -0
  23. package/dist/index.js +20 -15
  24. package/dist/index.js.map +2 -2
  25. package/dist/learning.js +4 -4
  26. package/dist/model-starter-attempts.js +5 -1
  27. package/dist/model-starter-catalog.js +5 -5
  28. package/dist/model-starters.js +5 -5
  29. package/dist/model-taskset-runs.js +14 -11
  30. package/dist/model-taskset-runs.js.map +2 -2
  31. package/dist/taskset-drafts.js +10 -8
  32. package/dist/taskset-drafts.js.map +1 -1
  33. package/dist/taskset-packages.js +42 -364
  34. package/dist/taskset-packages.js.map +4 -4
  35. package/dist/training-bundle.js +10 -8
  36. package/dist/training-bundle.js.map +1 -1
  37. package/dist/training-projects.js +134 -0
  38. package/dist/training-projects.js.map +7 -0
  39. package/dist/training.js +3 -3
  40. package/dist/types/packages/cloud/src/hosted-chat.d.ts +1 -0
  41. package/dist/types/packages/cloud/src/hosted-chat.d.ts.map +1 -1
  42. package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts +1631 -0
  43. package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts.map +1 -0
  44. package/dist/types/packages/sdk/src/dataset-workspace-contracts.d.ts +1625 -0
  45. package/dist/types/packages/sdk/src/dataset-workspace-contracts.d.ts.map +1 -0
  46. package/dist/types/packages/sdk/src/dataset-workspaces.d.ts +3 -0
  47. package/dist/types/packages/sdk/src/dataset-workspaces.d.ts.map +1 -0
  48. package/dist/types/packages/sdk/src/evaluation-project-context.d.ts +19 -0
  49. package/dist/types/packages/sdk/src/evaluation-project-context.d.ts.map +1 -0
  50. package/dist/types/packages/sdk/src/managed-training-preparation.d.ts +2 -2
  51. package/dist/types/packages/sdk/src/model-batch-review-preparation.d.ts +3 -3
  52. package/dist/types/packages/sdk/src/model-batch-review.d.ts +7 -7
  53. package/dist/types/packages/sdk/src/model-learning-intent.d.ts +1 -1
  54. package/dist/types/packages/sdk/src/model-learning-policy.d.ts +1 -1
  55. package/dist/types/packages/sdk/src/model-projects.d.ts +122 -122
  56. package/dist/types/packages/sdk/src/model-starter-attempts.d.ts +144 -29
  57. package/dist/types/packages/sdk/src/model-starter-attempts.d.ts.map +1 -1
  58. package/dist/types/packages/sdk/src/model-starter-catalog.d.ts +23 -23
  59. package/dist/types/packages/sdk/src/model-starter-execution.d.ts +3 -3
  60. package/dist/types/packages/sdk/src/model-starters.d.ts +22 -22
  61. package/dist/types/packages/sdk/src/model-taskset-runs-contracts.d.ts +91 -16
  62. package/dist/types/packages/sdk/src/model-taskset-runs-contracts.d.ts.map +1 -1
  63. package/dist/types/packages/sdk/src/model-taskset-runs.d.ts +85 -15
  64. package/dist/types/packages/sdk/src/model-taskset-runs.d.ts.map +1 -1
  65. package/dist/types/packages/sdk/src/task-inventory.d.ts +3 -3
  66. package/dist/types/packages/sdk/src/taskset-authored-contracts.d.ts +51 -51
  67. package/dist/types/packages/sdk/src/taskset-authored-files.d.ts +30 -30
  68. package/dist/types/packages/sdk/src/taskset-draft-api-contracts.d.ts +86 -86
  69. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts +183 -183
  70. package/dist/types/packages/sdk/src/taskset-draft-core.d.ts +42 -42
  71. package/dist/types/packages/sdk/src/taskset-draft-dataset-artifacts.d.ts +36 -36
  72. package/dist/types/packages/sdk/src/taskset-draft-dataset-sources.d.ts +34 -34
  73. package/dist/types/packages/sdk/src/taskset-draft-document.d.ts +43 -43
  74. package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts +1094 -48
  75. package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts.map +1 -1
  76. package/dist/types/packages/sdk/src/taskset-draft-source.d.ts +71 -71
  77. package/dist/types/packages/sdk/src/taskset-draft-workspace.d.ts +84 -84
  78. package/dist/types/packages/sdk/src/taskset-package-client.d.ts +671 -671
  79. package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts +371 -371
  80. package/dist/types/packages/sdk/src/taskset-package-grader-projection.d.ts +1 -1
  81. package/dist/types/packages/sdk/src/taskset-package-learning.d.ts +5 -5
  82. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts +87 -87
  83. package/dist/types/packages/sdk/src/training-evaluation-results.d.ts +1 -1
  84. package/dist/types/packages/sdk/src/training-learning-batch.d.ts +64 -64
  85. package/dist/types/packages/sdk/src/training-project-client.d.ts +401 -0
  86. package/dist/types/packages/sdk/src/training-project-client.d.ts.map +1 -0
  87. package/dist/types/packages/sdk/src/training-project-contracts.d.ts +617 -0
  88. package/dist/types/packages/sdk/src/training-project-contracts.d.ts.map +1 -0
  89. package/dist/types/packages/sdk/src/training-projects.d.ts +3 -0
  90. package/dist/types/packages/sdk/src/training-projects.d.ts.map +1 -0
  91. package/dist/types/packages/sdk/src/training.d.ts +24 -24
  92. package/package.json +10 -1
  93. package/dist/chunk-ECTMEJ5N.js.map +0 -7
  94. package/dist/chunk-EJYSXE4V.js.map +0 -7
  95. /package/dist/{chunk-FPOW5PU7.js.map → chunk-CGIMLZE5.js.map} +0 -0
  96. /package/dist/{chunk-DNEPLQXN.js.map → chunk-KYCQ7LZ4.js.map} +0 -0
  97. /package/dist/{chunk-TXQHWOFM.js.map → chunk-LGEF4S5I.js.map} +0 -0
  98. /package/dist/{chunk-42YOB36J.js.map → chunk-WOPM32SE.js.map} +0 -0
@@ -0,0 +1,380 @@
1
+ import {
2
+ decodeTasksetDraftWorkspaceFile,
3
+ publishTasksetDraft,
4
+ renderTasksetDraftManifests,
5
+ validateTasksetDraftWorkspace
6
+ } from "./chunk-32H2EJRA.js";
7
+ import {
8
+ materializePortableTasksetRelease,
9
+ portableTasksetEnvironment,
10
+ projectPortableTaskRecord
11
+ } from "./chunk-DT7FRNIZ.js";
12
+ import {
13
+ TasksetSchema,
14
+ computeTasksetHash
15
+ } from "./chunk-LGEF4S5I.js";
16
+ import {
17
+ MAX_TASKSET_PACKAGE_BYTES,
18
+ ModelStarterExecutionSchema,
19
+ ModelTasksetDerivationSchema,
20
+ assertModelTasksetAuthoring,
21
+ compileModelTasksetReward,
22
+ createTasksetPackage,
23
+ createTasksetPackageExecutionFile,
24
+ decodeTasksetPackageFile,
25
+ deriveModelTaskset,
26
+ modelAuthoredTasksetId,
27
+ modelStarterExecutionAssetId,
28
+ resolveTasksetPackageExecution,
29
+ resolveTasksetPackageInstructions,
30
+ validateTasksetPackage
31
+ } from "./chunk-WOPM32SE.js";
32
+ import {
33
+ ModelTasksetAuthoringOwnerSchema,
34
+ ModelTasksetDraftPreparationSchema,
35
+ ModelTasksetDraftRequestSchema,
36
+ TasksetDraftFilePathSchema
37
+ } from "./chunk-2U54EOXJ.js";
38
+ import {
39
+ ImmutableAssetRefSchema,
40
+ contentHash,
41
+ sha256
42
+ } from "./chunk-QUOW6URQ.js";
43
+
44
+ // src/model-taskset-authoring.ts
45
+ import { createVerifierSetRelease } from "@openpond/evals";
46
+ import { learningRef as learningRef2, sameLearningRef as sameLearningRef2, sealLearningContent as sealLearningContent2 } from "@openpond/evals/learning";
47
+ import { TasksetReleaseSchema as TasksetReleaseSchema2 } from "@openpond/evals/tasksets";
48
+
49
+ // src/model-bound-taskset-authoring.ts
50
+ import { LearningTextAssetSchema, TaskDefinitionSchema, learningRef, sameLearningRef, sealLearningContent } from "@openpond/evals/learning";
51
+ import { TasksetReleaseSchema } from "@openpond/evals/tasksets";
52
+ function publishBoundModelTasksetDraftPackage(input) {
53
+ const source = validateTasksetPackage(input.source);
54
+ const edited = validateTasksetPackage(input.edited);
55
+ const prepared = input.preparation;
56
+ 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.");
57
+ if (source.contentHash !== prepared.sourcePackageHash || !sameLearningRef(learningRef(source.taskset), prepared.sourceTasksetRef)) throw new Error("Bound draft differs from its retained source package.");
58
+ const normalizedGraders = (value) => value.taskset.graders.map((grader) => grader.kind === "custom_verifier" ? { ...grader, exportName: grader.exportName ?? "verify" } : grader);
59
+ if (contentHash(normalizedGraders(source)) !== contentHash(normalizedGraders(edited))) throw new Error("Edit the saved Reward in Rewards before changing this Taskset's graders.");
60
+ const resources = source.modelResources;
61
+ const assets = new Map(resources.assets.map((asset) => [asset.id, asset]));
62
+ const execution = resolveTasksetPackageExecution(edited);
63
+ const sourceExecution = resolveTasksetPackageExecution(source);
64
+ const environmentContent = (value) => {
65
+ const { id: _id, revision: _revision, contentHash: _hash, metadata, ...contract } = value;
66
+ const { javascriptEnvironment: _javascript, ...retained } = metadata;
67
+ return { ...contract, metadata: { ...retained, resources: retained.resources ?? [] } };
68
+ };
69
+ const javascriptContent = (value) => {
70
+ if (!value) return null;
71
+ const { id: _id, revision: _revision, contentHash: _hash, ...contract } = value.execution.javascript;
72
+ return contract;
73
+ };
74
+ const unchangedEnvironment = contentHash(environmentContent(source.environment)) === contentHash(environmentContent(edited.environment)) && contentHash(javascriptContent(sourceExecution)) === contentHash(javascriptContent(execution));
75
+ const selectedEnvironment = unchangedEnvironment ? source.environment : edited.environment;
76
+ const selectedExecution = unchangedEnvironment ? sourceExecution : execution;
77
+ const requiredIds = /* @__PURE__ */ new Set([
78
+ ...resources.assets.map((asset) => asset.id),
79
+ ...edited.taskset.tasks.flatMap((task) => task.privilegedContextRef ? [task.privilegedContextRef] : []),
80
+ ...[edited.environment.actionSchemaRef, edited.environment.observationSchemaRef, edited.environment.stateSchemaRef].flatMap((ref) => ref ? [ref.id] : []),
81
+ ...execution?.assets.map((asset) => asset.id) ?? []
82
+ ]);
83
+ for (const id of requiredIds) {
84
+ const file = edited.files.find((file2) => file2.asset.id === id);
85
+ if (!file) throw new Error(`Bound Taskset asset is missing: ${id}.`);
86
+ const text = new TextDecoder("utf-8", { fatal: true }).decode(decodeTasksetPackageFile(file));
87
+ assets.set(id, LearningTextAssetSchema.parse(sealLearningContent({ schemaVersion: "openpond.learningTextAsset.v1", id, revision: 1, asset: file.asset, text })));
88
+ }
89
+ const instructions = resolveTasksetPackageInstructions(edited);
90
+ const { contentHash: _definitionHash, ...definitionContent } = resources.taskDefinition;
91
+ const { policy, environment, environmentRelease, tools, capabilities, verifierSetRelease } = edited.taskset;
92
+ const taskDefinition = TaskDefinitionSchema.parse(sealLearningContent({
93
+ ...definitionContent,
94
+ instructions,
95
+ execution: { policy, environment, environmentRelease, tools, capabilities, verifierSetRelease }
96
+ }));
97
+ const { contentHash: _taskHash, ...taskContent } = edited.taskset;
98
+ const taskset = TasksetReleaseSchema.parse(sealLearningContent({ ...taskContent, tasks: edited.taskset.tasks.map((task) => resources.instructionMode === "per_task" ? task : { ...task, policyVisibleContext: { ...task.policyVisibleContext, instructions } }) }));
99
+ const derived = compileModelTasksetReward({
100
+ owner: prepared.lineage.owner,
101
+ source: { ...resources, taskset: source.taskset, executionResources: { environment: source.environment, verifierSet: source.verifierSet } },
102
+ rewardBinding: resources.rewardBinding,
103
+ rewards: resources.rewards,
104
+ assets: [...assets.values()],
105
+ edits: { taskset, taskDefinition, executionResources: { environment: selectedEnvironment, verifierSet: edited.verifierSet }, ...selectedExecution ? { execution: selectedExecution.execution } : {} }
106
+ });
107
+ const lineage = ModelTasksetDerivationSchema.parse(derived.taskset.metadata.modelTasksetDerivation);
108
+ if (derived.taskset.id !== prepared.tasksetId || derived.taskset.revision !== prepared.tasksetRevision || contentHash({ ...lineage, schemaVersion: prepared.lineage.schemaVersion }) !== contentHash(prepared.lineage)) throw new Error("Bound draft differs from its retained ownership lineage.");
109
+ const { taskset: published, executionResources, ...modelResources } = derived;
110
+ return createTasksetPackage({ schemaVersion: "openpond.tasksetPackage.v1", taskset: published, ...executionResources, modelResources, files: edited.files });
111
+ }
112
+
113
+ // src/model-taskset-authoring.ts
114
+ function prepareModelTasksetDraft(input) {
115
+ const request = ModelTasksetDraftRequestSchema.parse(input.request);
116
+ const owner = ModelTasksetAuthoringOwnerSchema.parse(input.owner);
117
+ const source = validateTasksetPackage(input.source);
118
+ if (source.learningResources) throw new Error("Reviewed Tasksets require their reviewed authoring workflow.");
119
+ if (source.contentHash !== request.sourcePackageHash) throw new Error("Taskset draft source package changed.");
120
+ if (source.modelResources) {
121
+ const derived = deriveModelTaskset({
122
+ owner,
123
+ source: { ...source.modelResources, taskset: source.taskset, executionResources: { environment: source.environment, verifierSet: source.verifierSet } },
124
+ rewardBinding: source.modelResources.rewardBinding,
125
+ rewards: source.modelResources.rewards,
126
+ assets: source.modelResources.assets
127
+ });
128
+ const lineage2 = derived.taskset.metadata.modelTasksetDerivation;
129
+ return ModelTasksetDraftPreparationSchema.parse({
130
+ schemaVersion: "openpond.modelTasksetDraftPreparation.v1",
131
+ draftId: `model-taskset-draft-${contentHash({ owner, operationId: request.operationId })}`,
132
+ requestHash: contentHash(request),
133
+ sourcePackageHash: source.contentHash,
134
+ sourceTasksetRef: learningRef2(source.taskset),
135
+ tasksetId: derived.taskset.id,
136
+ tasksetRevision: derived.taskset.revision,
137
+ lineage: { ...lineage2, schemaVersion: "openpond.modelTasksetAuthoring.v1" },
138
+ authoringGraph: "bound"
139
+ });
140
+ }
141
+ const previous = assertModelTasksetAuthoring(source.taskset);
142
+ const owned = previous && contentHash(previous.owner) === contentHash(owner);
143
+ const root = owned ? previous.root : learningRef2(source.taskset);
144
+ const lineage = { schemaVersion: "openpond.modelTasksetAuthoring.v1", owner, root, parent: learningRef2(source.taskset) };
145
+ return ModelTasksetDraftPreparationSchema.parse({
146
+ schemaVersion: "openpond.modelTasksetDraftPreparation.v1",
147
+ draftId: `model-taskset-draft-${contentHash({ owner, operationId: request.operationId })}`,
148
+ requestHash: contentHash(request),
149
+ sourcePackageHash: source.contentHash,
150
+ sourceTasksetRef: learningRef2(source.taskset),
151
+ tasksetId: modelAuthoredTasksetId(lineage),
152
+ tasksetRevision: owned ? source.taskset.revision + 1 : 1,
153
+ lineage
154
+ });
155
+ }
156
+ function publishModelTasksetDraftPackage(input) {
157
+ const prepared = ModelTasksetDraftPreparationSchema.parse(input.preparation);
158
+ if (!sameLearningRef2(prepared.sourceTasksetRef, prepared.lineage.parent)) throw new Error("Taskset draft preparation differs from its source lineage.");
159
+ if (prepared.authoringGraph === "bound") {
160
+ if (!input.source) throw new Error("Bound Taskset authoring requires its retained source package.");
161
+ return publishBoundModelTasksetDraftPackage({ preparation: prepared, source: input.source, edited: input.edited });
162
+ }
163
+ const edited = requireOrdinaryPackage(input.edited);
164
+ const { contentHash: _verifierHash, ...verifierContent } = edited.verifierSet;
165
+ const verifierSet = createVerifierSetRelease({
166
+ ...verifierContent,
167
+ id: `${prepared.tasksetId}-verifiers`,
168
+ revision: prepared.tasksetRevision,
169
+ calibrationReceiptRefs: [],
170
+ metadata: { sourceVerifierSet: learningRef2(edited.verifierSet) }
171
+ });
172
+ const { contentHash: _hash, ...content } = edited.taskset;
173
+ const taskset = TasksetReleaseSchema2.parse(sealLearningContent2({
174
+ ...content,
175
+ id: prepared.tasksetId,
176
+ revision: prepared.tasksetRevision,
177
+ verifierSetRelease: { id: verifierSet.id, contentHash: verifierSet.contentHash },
178
+ metadata: {
179
+ modelTasksetAuthoring: prepared.lineage,
180
+ ...edited.taskset.metadata.environmentResources === void 0 ? {} : { environmentResources: edited.taskset.metadata.environmentResources },
181
+ ...edited.taskset.metadata.ordinaryAuthoring === void 0 ? {} : { ordinaryAuthoring: edited.taskset.metadata.ordinaryAuthoring }
182
+ }
183
+ }));
184
+ const resolved = resolveTasksetPackageExecution(edited);
185
+ const files = resolved ? [
186
+ ...edited.files.filter((file) => file.asset.id !== modelStarterExecutionAssetId(edited.taskset)),
187
+ createTasksetPackageExecutionFile({ ...resolved.execution, verifierSet })
188
+ ] : edited.files;
189
+ return createTasksetPackage({ schemaVersion: "openpond.tasksetPackage.v1", taskset, environment: edited.environment, verifierSet, files });
190
+ }
191
+ function requireOrdinaryPackage(value) {
192
+ const result = validateTasksetPackage(value);
193
+ if (result.modelResources || result.learningResources) throw new Error("This Taskset requires its bound or reviewed authoring workflow.");
194
+ return result;
195
+ }
196
+
197
+ // src/taskset-authored-files.ts
198
+ import { z } from "zod";
199
+
200
+ // src/taskset-authored-tool-environment.ts
201
+ import { createEnvironmentRelease } from "@openpond/evals";
202
+ import { JavaScriptEnvironmentDefinitionSchema } from "@openpond/evals/javascript-environment";
203
+ import { learningRef as learningRef3, sealLearningContent as sealLearningContent3 } from "@openpond/evals/learning";
204
+ function prepareAuthoredToolEnvironment(taskset, bytes, inventory, adapterId) {
205
+ if (taskset.environment.entrypoint !== "openpond.javascript-environment.v1") return { taskset, inventory, generatedFiles: [] };
206
+ const declarationPath = "environment/execution.json";
207
+ const declaration = bytes.get(declarationPath);
208
+ if (!declaration || declaration.length > 524288) throw new Error("Authored tool environment requires its bounded private execution declaration.");
209
+ const previous = ModelStarterExecutionSchema.parse(JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(declaration)));
210
+ const repin = (ref) => {
211
+ if (!ref) return null;
212
+ const file2 = inventory.find((file3) => file3.asset.id === ref.id && file3.asset.path === ref.path);
213
+ if (!file2) throw new Error(`Authored environment dependency is missing: ${ref.id}.`);
214
+ return file2.asset;
215
+ };
216
+ const { contentHash: _javascriptHash, ...javascriptContent } = previous.javascript;
217
+ const javascript = JavaScriptEnvironmentDefinitionSchema.parse(sealLearningContent3({
218
+ ...javascriptContent,
219
+ id: `javascript-${taskset.id}`,
220
+ revision: taskset.revision,
221
+ module: repin(previous.javascript.module)
222
+ }));
223
+ if (contentHash(javascript.tools) !== contentHash(taskset.environment.metadata.portableTools) || contentHash(javascript.tools.map((tool) => tool.name)) !== contentHash(taskset.environment.toolNames)) throw new Error("Authored environment tools differ from the Taskset's declared tools.");
224
+ const environment = createEnvironmentRelease({
225
+ schemaVersion: "openpond.environmentRelease.v1",
226
+ id: `environment-${taskset.id}`,
227
+ revision: taskset.revision,
228
+ contract: portableTasksetEnvironment(taskset),
229
+ actionSchemaRef: repin(previous.environment.actionSchemaRef),
230
+ observationSchemaRef: repin(previous.environment.observationSchemaRef),
231
+ stateSchemaRef: repin(previous.environment.stateSchemaRef),
232
+ artifactCollection: previous.environment.artifactCollection,
233
+ adapterConformanceHashes: {},
234
+ metadata: { javascriptEnvironment: learningRef3(javascript), resources: taskset.environment.resources ?? [] }
235
+ });
236
+ const prepared = TasksetSchema.parse({ ...taskset, environment: {
237
+ ...taskset.environment,
238
+ metadata: { ...taskset.environment.metadata, portableExecutionResources: { environment } }
239
+ } });
240
+ const releases = materializePortableTasksetRelease({ taskset: prepared, adapterId });
241
+ const file = createTasksetPackageExecutionFile({ javascript, environment, verifierSet: releases.verifierSetRelease });
242
+ const nextInventory = [...inventory.filter((entry) => entry.sourcePath !== declarationPath), { asset: file.asset, sourcePath: declarationPath }];
243
+ const finalized = TasksetSchema.parse({ ...prepared, metadata: { ...prepared.metadata, portableFileInventory: nextInventory } });
244
+ return {
245
+ taskset: TasksetSchema.parse({ ...finalized, contentHash: computeTasksetHash(finalized) }),
246
+ inventory: nextInventory,
247
+ generatedFiles: [{ path: declarationPath, role: "environment", content: new TextDecoder().decode(decodeTasksetPackageFile(file)) }]
248
+ };
249
+ }
250
+
251
+ // src/taskset-authored-files.ts
252
+ var AuthoredTasksetFileInventorySchema = z.array(z.object({
253
+ asset: ImmutableAssetRefSchema,
254
+ sourcePath: z.string().min(1)
255
+ }).strict()).max(1e4);
256
+ var GENERATED_MANIFESTS = /* @__PURE__ */ new Set(["taskset.json", "capabilities.json", "data/tasks.jsonl", "graders/graders.json", "fixtures/grader-fixtures.json", "environment/taskset.ts"]);
257
+ function isGeneratedTasksetPublicationFilePath(path) {
258
+ return GENERATED_MANIFESTS.has(path);
259
+ }
260
+ function prepareAuthoredTasksetSource(tasksetInput, sourceFiles, adapterId) {
261
+ const taskset = TasksetSchema.parse(tasksetInput);
262
+ if (taskset.metadata.taskDefinition !== void 0 || taskset.metadata.rewardBinding !== void 0) return { taskset, generatedFiles: [] };
263
+ const bytes = /* @__PURE__ */ new Map();
264
+ let total = 0;
265
+ for (const [name, data] of sourceFiles) {
266
+ TasksetDraftFilePathSchema.parse(name);
267
+ total += data.byteLength;
268
+ if (bytes.size >= 1e4 || total > MAX_TASKSET_PACKAGE_BYTES * 3 / 4) throw new Error("Taskset source exceeds the package byte limit.");
269
+ bytes.set(name, data.slice());
270
+ }
271
+ const aggregator = taskset.metrics?.customAggregator;
272
+ const aggregatorBytes = aggregator ? bytes.get(aggregator.module) : void 0;
273
+ if (aggregator && !aggregatorBytes) throw new Error("Declared Taskset metric module is missing.");
274
+ const metrics = aggregator && aggregatorBytes ? { ...taskset.metrics, customAggregator: { ...aggregator, contentHash: sha256(aggregatorBytes) } } : taskset.metrics;
275
+ const inventory = /* @__PURE__ */ new Map();
276
+ const declaredPaths = /* @__PURE__ */ new Set();
277
+ const generatedFiles = [];
278
+ const ref = (id, sourcePath, mediaType, visibility) => {
279
+ const source = bytes.get(sourcePath);
280
+ if (!source) throw new Error(`Declared Taskset file is missing: ${sourcePath}.`);
281
+ return { id, path: sourcePath, contentHash: sha256(source), sizeBytes: source.byteLength, mediaType, visibility };
282
+ };
283
+ const add = (asset, sourcePath = asset.path) => {
284
+ const previous = inventory.get(asset.id);
285
+ if (previous && contentHash(previous) !== contentHash({ asset, sourcePath })) throw new Error(`Conflicting Taskset file identity: ${asset.id}.`);
286
+ const source = bytes.get(sourcePath);
287
+ if (!source || source.length !== asset.sizeBytes || sha256(source) !== asset.contentHash) throw new Error(`Taskset file differs from its declared bytes: ${asset.id}.`);
288
+ inventory.set(asset.id, { asset, sourcePath });
289
+ declaredPaths.add(sourcePath);
290
+ };
291
+ for (const task of taskset.tasks) {
292
+ const portable = projectPortableTaskRecord(task);
293
+ for (const asset of portable.artifactRefs) add(asset, task.assets?.find((candidate) => candidate.id === asset.id)?.artifactRef ?? asset.path);
294
+ for (const output of portable.requiredOutputs ?? []) if (output.schemaRef) add(output.schemaRef);
295
+ }
296
+ 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"));
297
+ const graders = taskset.graders.map((grader) => {
298
+ if (grader.kind === "custom_verifier") {
299
+ let asset = ref(`verifier-${grader.id}`, grader.module, "application/javascript", "host_private");
300
+ const previous = ImmutableAssetRefSchema.safeParse(grader.metadata.portableVerifierRef);
301
+ if (previous.success && previous.data.contentHash === asset.contentHash && previous.data.sizeBytes === asset.sizeBytes) asset = previous.data;
302
+ add(asset, grader.module);
303
+ return { ...grader, metadata: { ...grader.metadata, portableVerifierRef: asset } };
304
+ }
305
+ if (grader.kind === "human" || grader.kind === "model_judge") {
306
+ const content = new TextEncoder().encode(grader.rubric);
307
+ const sourcePath = `graders/rubric-${sha256(content)}.md`;
308
+ bytes.set(sourcePath, content);
309
+ const asset = ref(`rubric-${grader.id}`, sourcePath, "text/markdown", "verifier");
310
+ add(asset);
311
+ generatedFiles.push({ path: sourcePath, role: "verifier", content: grader.rubric });
312
+ return { ...grader, metadata: { ...grader.metadata, portableRubricRef: asset } };
313
+ }
314
+ return grader;
315
+ });
316
+ if (aggregator && ![...inventory.values()].some((file) => file.asset.path === aggregator.module && file.sourcePath === aggregator.module && file.asset.visibility !== "policy")) {
317
+ add(ref(`metric-${contentHash(aggregator.module)}`, aggregator.module, "application/javascript", "host_private"));
318
+ }
319
+ const previousInventory = AuthoredTasksetFileInventorySchema.parse(taskset.metadata.portableFileInventory ?? []);
320
+ for (const name of [...bytes.keys()].sort()) if (!declaredPaths.has(name)) {
321
+ const previous = previousInventory.find((file) => file.sourcePath === name && !inventory.has(file.asset.id));
322
+ add(previous ? { ...ref(previous.asset.id, name, previous.asset.mediaType, previous.asset.visibility), path: previous.asset.path } : ref(`taskset-file-${contentHash(name)}`, name, "application/octet-stream", "host_private"), name);
323
+ }
324
+ const { importedPackageHash, derivedPortableMetadata: _derived, ...metadata } = taskset.metadata;
325
+ const environmentMetadata = { ...taskset.environment.metadata };
326
+ if (environmentMetadata.portableExecutionResources !== void 0) {
327
+ const resources = z.object({ environment: z.unknown(), verifierSet: z.unknown().optional() }).parse(environmentMetadata.portableExecutionResources);
328
+ environmentMetadata.portableExecutionResources = { environment: resources.environment };
329
+ }
330
+ const prepared = TasksetSchema.parse({
331
+ ...taskset,
332
+ graders,
333
+ metrics,
334
+ environment: { ...taskset.environment, metadata: environmentMetadata },
335
+ metadata: { ...metadata, ...importedPackageHash === void 0 ? {} : { sourceImportedPackageHash: importedPackageHash }, portableFileInventory: AuthoredTasksetFileInventorySchema.parse([...inventory.values()].sort((left, right) => left.asset.id.localeCompare(right.asset.id))) }
336
+ });
337
+ const executable = prepareAuthoredToolEnvironment(prepared, bytes, [...inventory.values()], adapterId);
338
+ return { taskset: TasksetSchema.parse({ ...executable.taskset, contentHash: computeTasksetHash(executable.taskset) }), generatedFiles: [...generatedFiles, ...executable.generatedFiles] };
339
+ }
340
+
341
+ // src/taskset-draft-package-compiler.ts
342
+ function compileTasksetDraftWorkspace(input) {
343
+ const workspace = validateTasksetDraftWorkspace(input.workspace);
344
+ const preparation = input.preparation === null ? null : ModelTasksetDraftPreparationSchema.parse(input.preparation);
345
+ if (preparation ? workspace.draft.id !== preparation.draftId || workspace.draft.modelScope?.modelId !== preparation.lineage.owner.modelId || workspace.draft.profileId !== preparation.lineage.owner.scopeId || contentHash(workspace.draft.modelScope?.source ?? null) !== contentHash(preparation) : workspace.draft.modelScope?.source !== void 0) throw new Error("Taskset draft differs from its retained source preparation.");
346
+ const taskset = publishTasksetDraft({ draft: workspace.draft, now: workspace.draft.updatedAt, sourcePackageHash: workspace.contentHash });
347
+ const files = new Map(workspace.files.map((file) => [file.path, decodeTasksetDraftWorkspaceFile(file)]));
348
+ for (const [path, source] of renderTasksetDraftManifests(workspace.draft)) if (!isGeneratedTasksetPublicationFilePath(path)) files.set(path, new TextEncoder().encode(source));
349
+ const authored = prepareAuthoredTasksetSource(taskset, files, input.adapterId);
350
+ for (const file of authored.generatedFiles) files.set(file.path, new TextEncoder().encode(file.content));
351
+ const releases = materializePortableTasksetRelease({ taskset: authored.taskset, adapterId: input.adapterId });
352
+ const inventory = AuthoredTasksetFileInventorySchema.parse(authored.taskset.metadata.portableFileInventory);
353
+ const edited = createTasksetPackage({
354
+ schemaVersion: "openpond.tasksetPackage.v1",
355
+ taskset: releases.tasksetRelease,
356
+ environment: releases.environmentRelease,
357
+ verifierSet: releases.verifierSetRelease,
358
+ files: inventory.map((entry) => {
359
+ const bytes = files.get(entry.sourcePath);
360
+ if (!bytes) throw new Error(`Captured Taskset file is missing: ${entry.sourcePath}.`);
361
+ return { asset: entry.asset, base64: Buffer.from(bytes).toString("base64") };
362
+ })
363
+ });
364
+ return preparation ? publishModelTasksetDraftPackage({ preparation, edited, source: input.source }) : edited;
365
+ }
366
+ function compileModelTasksetDraftWorkspace(input) {
367
+ if (!input.workspace.draft.modelScope) throw new Error("Taskset draft requires a Model owner.");
368
+ return compileTasksetDraftWorkspace(input);
369
+ }
370
+
371
+ export {
372
+ prepareModelTasksetDraft,
373
+ publishModelTasksetDraftPackage,
374
+ AuthoredTasksetFileInventorySchema,
375
+ isGeneratedTasksetPublicationFilePath,
376
+ prepareAuthoredTasksetSource,
377
+ compileTasksetDraftWorkspace,
378
+ compileModelTasksetDraftWorkspace
379
+ };
380
+ //# sourceMappingURL=chunk-DNBAJUVR.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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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",
6
+ "names": ["learningRef", "sameLearningRef", "sealLearningContent", "TasksetReleaseSchema", "file", "lineage", "learningRef", "sameLearningRef", "TasksetReleaseSchema", "sealLearningContent", "learningRef", "sealLearningContent", "file", "sealLearningContent", "learningRef"]
7
+ }
@@ -1,13 +1,7 @@
1
- import {
2
- GraderSpecSchema
3
- } from "./chunk-TXQHWOFM.js";
4
- import {
5
- decodeTasksetPackageFile
6
- } from "./chunk-42YOB36J.js";
7
1
  import {
8
2
  CapabilityRequirementSchema,
9
3
  ToolDeclarationSchema
10
- } from "./chunk-EAEYAU4R.js";
4
+ } from "./chunk-Y4NGWGTA.js";
11
5
  import {
12
6
  ImmutableAssetRefSchema,
13
7
  contentHash,
@@ -373,97 +367,12 @@ function segment(value) {
373
367
  return normalized || "asset";
374
368
  }
375
369
 
376
- // src/taskset-package-grader-projection.ts
377
- import { compileBoundGraders as compileBoundGraders2, resolveBoundRewards } from "@openpond/evals/rewards";
378
- import { learningRef, verifyLearningTextAsset, RewardFixtureAuthoringFieldsSchema } from "@openpond/evals/learning";
379
- import { z } from "zod";
380
- function importedPackageGraders(value) {
381
- const authoring = value.taskset.metadata.ordinaryAuthoring;
382
- const calibrationFixtures = z.record(z.string(), z.array(z.string().min(1)).max(1e5)).parse(authoring?.judgeCalibrationFixtures ?? {});
383
- return value.taskset.graders.map((grader) => {
384
- const base = { ...grader, label: grader.id, metadata: { portableGrader: grader } };
385
- if (grader.kind === "custom_verifier") return GraderSpecSchema.parse({
386
- ...base,
387
- module: learningVerifierModule(grader.verifierRef.contentHash),
388
- exportName: grader.exportName ?? "verify",
389
- metadata: { ...base.metadata, portableVerifierRef: grader.verifierRef }
390
- });
391
- if (grader.kind === "human" || grader.kind === "model_judge") {
392
- const file = value.files.find((file2) => file2.asset.id === grader.rubricRef.id);
393
- if (!file) throw new Error(`Imported rubric is missing: ${grader.id}.`);
394
- const rubric = new TextDecoder("utf-8", { fatal: true }).decode(decodeTasksetPackageFile(file));
395
- const metadata = { ...base.metadata, portableRubricRef: grader.rubricRef };
396
- if (grader.kind === "human") return GraderSpecSchema.parse({ ...base, rubric, metadata });
397
- if (!grader.model) throw new Error(`Imported judge ${grader.id} requires its declared model before local preparation.`);
398
- return GraderSpecSchema.parse({
399
- ...base,
400
- rubric,
401
- metadata,
402
- judge: grader.model,
403
- temperature: grader.temperature ?? 0,
404
- calibrationStatus: "pending",
405
- calibrationFixtureRefs: calibrationFixtures[grader.id] ?? []
406
- });
407
- }
408
- return GraderSpecSchema.parse({
409
- ...base,
410
- kind: grader.kind === "artifact" ? "file" : grader.kind,
411
- config: grader.kind === "artifact" ? { ...grader.config, ...grader.config.refIncludes === void 0 ? {} : { pathIncludes: grader.config.refIncludes } } : grader.config
412
- });
413
- });
414
- }
415
- function projectLearningBatchGraders(binding, rewards, assets = []) {
416
- const resolved = resolveBoundRewards(binding, rewards);
417
- return compileBoundGraders2(binding, rewards).map((grader) => {
418
- const reward = resolved.find(({ source }) => source.graderId === grader.id).reward;
419
- const base = { ...grader, label: reward.name, metadata: { rewardBinding: learningRef(binding) } };
420
- if (grader.kind === "model_judge") {
421
- if (!grader.model || grader.calibrationStatus !== "passed" || !reward.calibrationCheckRef || !reward.fixtureSetRef) throw new Error(`Reward ${grader.id} needs a retained passing calibration check before preparation.`);
422
- const rubric = assets.find((asset) => asset.id === grader.rubricRef.id);
423
- const fixtures = assets.find((asset) => asset.id === reward.fixtureSetRef.id);
424
- if (!rubric || !fixtures) throw new Error(`Reward ${grader.id} is missing its immutable rubric or calibration fixtures.`);
425
- const fields = RewardFixtureAuthoringFieldsSchema.array().min(1).max(50).parse(JSON.parse(verifyLearningTextAsset(fixtures, reward.fixtureSetRef)));
426
- return GraderSpecSchema.parse({
427
- ...base,
428
- rubric: verifyLearningTextAsset(rubric, grader.rubricRef),
429
- judge: grader.model,
430
- temperature: grader.temperature ?? 0,
431
- calibrationFixtureRefs: fields.map((fixture) => fixture.id),
432
- metadata: {
433
- ...base.metadata,
434
- portableRubricRef: grader.rubricRef,
435
- calibrationEvidenceHash: reward.calibrationCheckRef.contentHash,
436
- calibrationCheckRef: reward.calibrationCheckRef
437
- }
438
- });
439
- }
440
- if (grader.kind === "custom_verifier") return GraderSpecSchema.parse({
441
- ...base,
442
- module: learningVerifierModule(grader.verifierRef.contentHash),
443
- exportName: grader.exportName ?? "verify",
444
- metadata: { ...base.metadata, portableVerifierRef: grader.verifierRef }
445
- });
446
- if (grader.kind === "human") {
447
- const asset = assets.find((asset2) => asset2.id === grader.rubricRef.id);
448
- if (!asset) throw new Error(`Reward ${grader.id} is missing its immutable rubric.`);
449
- return GraderSpecSchema.parse({ ...base, rubric: verifyLearningTextAsset(asset, grader.rubricRef) });
450
- }
451
- return GraderSpecSchema.parse({ ...base, kind: grader.kind === "artifact" ? "file" : grader.kind });
452
- });
453
- }
454
- function learningVerifierModule(hash2) {
455
- return `graders/reward-${hash2}.js`;
456
- }
457
-
458
370
  export {
459
371
  resolvePortableTasksetRewardExecution,
460
372
  materializePortableTasksetRelease,
461
373
  projectPreferenceComparisonRelease,
462
374
  portableTasksetEnvironment,
463
375
  portableTasksetTools,
464
- projectPortableTaskRecord,
465
- importedPackageGraders,
466
- projectLearningBatchGraders,
467
- learningVerifierModule
376
+ projectPortableTaskRecord
468
377
  };
469
- //# sourceMappingURL=chunk-YGCHXNPI.js.map
378
+ //# sourceMappingURL=chunk-DT7FRNIZ.js.map