openpond-sdk 0.11.6 → 0.12.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 (133) hide show
  1. package/TASKSETS.md +13 -0
  2. package/dist/{chunk-64HOO3TO.js → chunk-32GJS7FV.js} +2 -2
  3. package/dist/{chunk-OLHLJ2X3.js → chunk-644E3NM2.js} +8 -2
  4. package/dist/chunk-644E3NM2.js.map +7 -0
  5. package/dist/{chunk-A3ZYHREX.js → chunk-7L4NIEW2.js} +2 -2
  6. package/dist/{chunk-JPPOMXMY.js → chunk-7MISLCN2.js} +2 -2
  7. package/dist/{chunk-NFLEPINR.js → chunk-BDDT6VN6.js} +5 -5
  8. package/dist/{chunk-7GA57BEJ.js → chunk-FWX7SH7Y.js} +19 -3
  9. package/dist/chunk-FWX7SH7Y.js.map +7 -0
  10. package/dist/{chunk-2NBI5UOK.js → chunk-FZYLRL7H.js} +3 -3
  11. package/dist/{chunk-PL3ETQYC.js → chunk-LHRHB5EJ.js} +2 -2
  12. package/dist/{chunk-ILXO64IV.js → chunk-SVBV2VEK.js} +58 -3
  13. package/dist/chunk-SVBV2VEK.js.map +7 -0
  14. package/dist/{chunk-I3QQEXDY.js → chunk-UK2KWJIQ.js} +12 -9
  15. package/dist/{chunk-I3QQEXDY.js.map → chunk-UK2KWJIQ.js.map} +3 -3
  16. package/dist/{chunk-NA7PNRQZ.js → chunk-WYGBGCRO.js} +3 -3
  17. package/dist/{chunk-IS3P4OOW.js → chunk-X6J3VVYC.js} +9 -6
  18. package/dist/{chunk-IS3P4OOW.js.map → chunk-X6J3VVYC.js.map} +2 -2
  19. package/dist/{chunk-IPWCUGDN.js → chunk-YRTA3G6O.js} +10 -3
  20. package/dist/chunk-YRTA3G6O.js.map +7 -0
  21. package/dist/connected-evidence.js +17 -9
  22. package/dist/dataset-workspaces.js +293 -17
  23. package/dist/dataset-workspaces.js.map +4 -4
  24. package/dist/experiment-evaluation-schedules.js +9 -9
  25. package/dist/experiments.js +9 -9
  26. package/dist/index.js +20 -12
  27. package/dist/index.js.map +1 -1
  28. package/dist/model-starter-catalog.js +2 -2
  29. package/dist/model-starters.js +2 -2
  30. package/dist/taskset-drafts.js +6 -6
  31. package/dist/taskset-drafts.js.map +2 -2
  32. package/dist/taskset-packages.js +8 -8
  33. package/dist/training-bundle.js +5 -4
  34. package/dist/training-bundle.js.map +2 -2
  35. package/dist/types/packages/sdk/src/connected-dataset-source.d.ts +1 -0
  36. package/dist/types/packages/sdk/src/connected-dataset-source.d.ts.map +1 -1
  37. package/dist/types/packages/sdk/src/connected-evidence-client.d.ts +71 -0
  38. package/dist/types/packages/sdk/src/connected-evidence-client.d.ts.map +1 -1
  39. package/dist/types/packages/sdk/src/connected-evidence.d.ts +1 -0
  40. package/dist/types/packages/sdk/src/connected-evidence.d.ts.map +1 -1
  41. package/dist/types/packages/sdk/src/connected-starting-assets.d.ts +98 -0
  42. package/dist/types/packages/sdk/src/connected-starting-assets.d.ts.map +1 -0
  43. package/dist/types/packages/sdk/src/dataset-preparation-assembly.d.ts +11 -0
  44. package/dist/types/packages/sdk/src/dataset-preparation-assembly.d.ts.map +1 -0
  45. package/dist/types/packages/sdk/src/dataset-preparation-authoring-contracts.d.ts +11 -0
  46. package/dist/types/packages/sdk/src/dataset-preparation-authoring-contracts.d.ts.map +1 -1
  47. package/dist/types/packages/sdk/src/dataset-preparation-client.d.ts +21 -0
  48. package/dist/types/packages/sdk/src/dataset-preparation-client.d.ts.map +1 -1
  49. package/dist/types/packages/sdk/src/dataset-preparation-contracts.d.ts +18 -0
  50. package/dist/types/packages/sdk/src/dataset-preparation-contracts.d.ts.map +1 -1
  51. package/dist/types/packages/sdk/src/dataset-preparation-qualification-contracts.d.ts +89 -0
  52. package/dist/types/packages/sdk/src/dataset-preparation-qualification-contracts.d.ts.map +1 -0
  53. package/dist/types/packages/sdk/src/dataset-preparation-starting-state.d.ts +76 -0
  54. package/dist/types/packages/sdk/src/dataset-preparation-starting-state.d.ts.map +1 -0
  55. package/dist/types/packages/sdk/src/dataset-preparation-workspace.d.ts +10 -0
  56. package/dist/types/packages/sdk/src/dataset-preparation-workspace.d.ts.map +1 -1
  57. package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts +42 -0
  58. package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts.map +1 -1
  59. package/dist/types/packages/sdk/src/dataset-workspace-contracts.d.ts +12 -0
  60. package/dist/types/packages/sdk/src/dataset-workspace-contracts.d.ts.map +1 -1
  61. package/dist/types/packages/sdk/src/dataset-workspace-operations.d.ts +12 -0
  62. package/dist/types/packages/sdk/src/dataset-workspace-operations.d.ts.map +1 -1
  63. package/dist/types/packages/sdk/src/dataset-workspaces.d.ts +3 -0
  64. package/dist/types/packages/sdk/src/dataset-workspaces.d.ts.map +1 -1
  65. package/dist/types/packages/sdk/src/learning-batch-assets.d.ts +1 -0
  66. package/dist/types/packages/sdk/src/learning-batch-assets.d.ts.map +1 -1
  67. package/dist/types/packages/sdk/src/model-batch-review-contracts.d.ts +5 -0
  68. package/dist/types/packages/sdk/src/model-batch-review-contracts.d.ts.map +1 -1
  69. package/dist/types/packages/sdk/src/model-batch-review-preparation.d.ts +1 -0
  70. package/dist/types/packages/sdk/src/model-batch-review-preparation.d.ts.map +1 -1
  71. package/dist/types/packages/sdk/src/model-batch-review.d.ts +5 -2
  72. package/dist/types/packages/sdk/src/model-batch-review.d.ts.map +1 -1
  73. package/dist/types/packages/sdk/src/model-starter-attempts.d.ts +4 -1
  74. package/dist/types/packages/sdk/src/model-starter-attempts.d.ts.map +1 -1
  75. package/dist/types/packages/sdk/src/model-starter-catalog.d.ts +9 -0
  76. package/dist/types/packages/sdk/src/model-starter-catalog.d.ts.map +1 -1
  77. package/dist/types/packages/sdk/src/model-starter-execution.d.ts +4 -0
  78. package/dist/types/packages/sdk/src/model-starter-execution.d.ts.map +1 -1
  79. package/dist/types/packages/sdk/src/model-starters.d.ts +18 -0
  80. package/dist/types/packages/sdk/src/model-starters.d.ts.map +1 -1
  81. package/dist/types/packages/sdk/src/model-taskset-derivation.d.ts +13 -0
  82. package/dist/types/packages/sdk/src/model-taskset-derivation.d.ts.map +1 -1
  83. package/dist/types/packages/sdk/src/model-taskset-resources.d.ts +4 -0
  84. package/dist/types/packages/sdk/src/model-taskset-resources.d.ts.map +1 -1
  85. package/dist/types/packages/sdk/src/profile-external-dataset-package.d.ts +17 -2
  86. package/dist/types/packages/sdk/src/profile-external-dataset-package.d.ts.map +1 -1
  87. package/dist/types/packages/sdk/src/task-design-contracts.d.ts +4 -0
  88. package/dist/types/packages/sdk/src/task-design-contracts.d.ts.map +1 -1
  89. package/dist/types/packages/sdk/src/taskset-authored-contracts.d.ts +6 -0
  90. package/dist/types/packages/sdk/src/taskset-authored-contracts.d.ts.map +1 -1
  91. package/dist/types/packages/sdk/src/taskset-authored-files.d.ts +6 -0
  92. package/dist/types/packages/sdk/src/taskset-authored-files.d.ts.map +1 -1
  93. package/dist/types/packages/sdk/src/taskset-authored-portable-release.d.ts.map +1 -1
  94. package/dist/types/packages/sdk/src/taskset-calibration-fixtures.d.ts +5 -0
  95. package/dist/types/packages/sdk/src/taskset-calibration-fixtures.d.ts.map +1 -1
  96. package/dist/types/packages/sdk/src/taskset-draft-api-contracts.d.ts +12 -0
  97. package/dist/types/packages/sdk/src/taskset-draft-api-contracts.d.ts.map +1 -1
  98. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts +36 -0
  99. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts.map +1 -1
  100. package/dist/types/packages/sdk/src/taskset-draft-core.d.ts +11 -0
  101. package/dist/types/packages/sdk/src/taskset-draft-core.d.ts.map +1 -1
  102. package/dist/types/packages/sdk/src/taskset-draft-document.d.ts +7 -0
  103. package/dist/types/packages/sdk/src/taskset-draft-document.d.ts.map +1 -1
  104. package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts +34 -4
  105. package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts.map +1 -1
  106. package/dist/types/packages/sdk/src/taskset-draft-source.d.ts +12 -0
  107. package/dist/types/packages/sdk/src/taskset-draft-source.d.ts.map +1 -1
  108. package/dist/types/packages/sdk/src/taskset-draft-workspace.d.ts +12 -0
  109. package/dist/types/packages/sdk/src/taskset-draft-workspace.d.ts.map +1 -1
  110. package/dist/types/packages/sdk/src/taskset-package-client.d.ts +68 -0
  111. package/dist/types/packages/sdk/src/taskset-package-client.d.ts.map +1 -1
  112. package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts +35 -0
  113. package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts.map +1 -1
  114. package/dist/types/packages/sdk/src/taskset-package-grader-projection.d.ts +4 -0
  115. package/dist/types/packages/sdk/src/taskset-package-grader-projection.d.ts.map +1 -1
  116. package/dist/types/packages/sdk/src/taskset-package-learning.d.ts +8 -2
  117. package/dist/types/packages/sdk/src/taskset-package-learning.d.ts.map +1 -1
  118. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts +29 -7
  119. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts.map +1 -1
  120. package/dist/types/packages/sdk/src/training-learning-batch.d.ts +20 -0
  121. package/dist/types/packages/sdk/src/training-learning-batch.d.ts.map +1 -1
  122. package/package.json +2 -2
  123. package/dist/chunk-7GA57BEJ.js.map +0 -7
  124. package/dist/chunk-ILXO64IV.js.map +0 -7
  125. package/dist/chunk-IPWCUGDN.js.map +0 -7
  126. package/dist/chunk-OLHLJ2X3.js.map +0 -7
  127. /package/dist/{chunk-64HOO3TO.js.map → chunk-32GJS7FV.js.map} +0 -0
  128. /package/dist/{chunk-A3ZYHREX.js.map → chunk-7L4NIEW2.js.map} +0 -0
  129. /package/dist/{chunk-JPPOMXMY.js.map → chunk-7MISLCN2.js.map} +0 -0
  130. /package/dist/{chunk-NFLEPINR.js.map → chunk-BDDT6VN6.js.map} +0 -0
  131. /package/dist/{chunk-2NBI5UOK.js.map → chunk-FZYLRL7H.js.map} +0 -0
  132. /package/dist/{chunk-PL3ETQYC.js.map → chunk-LHRHB5EJ.js.map} +0 -0
  133. /package/dist/{chunk-NA7PNRQZ.js.map → chunk-WYGBGCRO.js.map} +0 -0
@@ -111,8 +111,14 @@ function materializePortableTasksetRelease(input) {
111
111
  sourceTasksetHash: input.taskset.contentHash,
112
112
  sourcePackageHash: input.taskset.metadata.sourcePackageHash ?? null,
113
113
  environmentResources: input.taskset.environment.resources ?? [],
114
+ workAssetStagingPaths: Object.fromEntries(tasks.filter((task) => task.assets?.some((asset) => asset.stagingPath)).map((task) => [task.id, Object.fromEntries((task.assets ?? []).filter((asset) => asset.stagingPath).map((asset) => [asset.id, asset.stagingPath]))])),
114
115
  ordinaryAuthoring: {
115
116
  instructions: input.taskset.objective,
117
+ graderSourceRewards: Object.fromEntries(input.taskset.graders.filter((grader) => grader.metadata.sourceReward !== void 0).map((grader) => [grader.id, grader.metadata.sourceReward])),
118
+ graderOrigins: Object.fromEntries(input.taskset.graders.map((grader) => [
119
+ grader.id,
120
+ grader.metadata.preparationOrigin === "reused" ? "reused" : grader.metadata.preparationOrigin === "adapted" || grader.metadata.adaptedFromReward ? "adapted" : "authored"
121
+ ])),
116
122
  graderFixtures: input.taskset.graderFixtures,
117
123
  judgeCalibrationFixtures: Object.fromEntries(input.taskset.graders.filter((grader) => grader.kind === "model_judge").map((grader) => [grader.id, grader.calibrationFixtureRefs]))
118
124
  },
@@ -167,7 +173,7 @@ function projectPortableTaskRecord(task) {
167
173
  const previous = original.artifactRefs.find((item) => item.id === asset.id);
168
174
  return {
169
175
  id: asset.id,
170
- path: previous?.path ?? `tasks/${segment(task.id)}/${segment(asset.fileName)}`,
176
+ path: previous?.path ?? `tasks/${segment(task.id)}/${asset.stagingPath ?? segment(asset.fileName)}`,
171
177
  contentHash: hash(asset.sha256),
172
178
  sizeBytes: asset.sizeBytes,
173
179
  mediaType: asset.mediaType,
@@ -201,7 +207,7 @@ function projectPortableTaskRecord(task) {
201
207
  privilegedContextRef: task.privilegedContextRef,
202
208
  artifactRefs: (task.assets ?? []).map((item) => ({
203
209
  id: item.id,
204
- path: `tasks/${segment(task.id)}/${segment(item.fileName)}`,
210
+ path: `tasks/${segment(task.id)}/${item.stagingPath ?? segment(item.fileName)}`,
205
211
  contentHash: hash(item.sha256),
206
212
  sizeBytes: item.sizeBytes,
207
213
  mediaType: item.mediaType,
@@ -268,6 +274,7 @@ function portableTools(taskset) {
268
274
  function portableGrader(grader) {
269
275
  const base = {
270
276
  id: grader.id,
277
+ ...grader.taskIds ? { taskIds: grader.taskIds } : {},
271
278
  version: grader.version,
272
279
  weight: grader.weight,
273
280
  hardGate: grader.hardGate,
@@ -376,4 +383,4 @@ export {
376
383
  portableTasksetTools,
377
384
  projectPortableTaskRecord
378
385
  };
379
- //# sourceMappingURL=chunk-IPWCUGDN.js.map
386
+ //# sourceMappingURL=chunk-YRTA3G6O.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/taskset-authored-portable-release.ts"],
4
+ "sourcesContent": ["import type { Taskset } from \"./taskset-authored-contracts.js\";\nimport type {\n GraderSpec,\n TaskDataRecord,\n} from \"./taskset-draft-core.js\";\nimport {\n TaskRecordSchema,\n GraderSpecSchema as PortableGraderSpecSchema,\n TasksetReleaseContentSchema,\n TasksetReleaseSchema,\n bindTasksetExecutionReleases,\n createEnvironmentRelease,\n createVerifierSetRelease,\n EnvironmentReleaseSchema,\n VerifierSetReleaseSchema,\n verifyEnvironmentRelease,\n verifyVerifierSetRelease,\n verifyPreferenceComparisonRelease,\n type EnvironmentContract,\n type GraderSpec as PortableGraderSpec,\n type PreferenceComparisonRelease,\n type TasksetRelease,\n} from \"@openpond/evals\";\nimport type {\n ImmutableAssetRef,\n ToolDeclaration,\n} from \"@openpond/harness\";\nimport {\n CapabilityRequirementSchema,\n ImmutableAssetRefSchema,\n ToolDeclarationSchema,\n} from \"@openpond/harness\";\n\nimport { contentHash, sha256 } from \"@openpond/harness\";\nimport { TaskBatchPackageMetadataSchema } from \"@openpond/evals/learning\";\nimport { compileBoundGraders, RewardBindingSchema, RewardReleaseSchema, type RewardBinding, type RewardRelease } from \"@openpond/evals/rewards\";\nimport { portableDeterministicCheck } from \"@openpond/evals/graders\";\n\nexport type TasksetRewardExecution = { binding: RewardBinding; rewards: RewardRelease[] };\n\nexport function resolvePortableTasksetRewardExecution(taskset: Taskset, supplied?: TasksetRewardExecution): TasksetRewardExecution | null {\n const learning = taskset.metadata.learning === undefined ? null : TaskBatchPackageMetadataSchema.parse(taskset.metadata.learning);\n const embedded = taskset.metadata.rewardExecution as { binding?: unknown; rewards?: unknown } | undefined;\n const execution = supplied ?? (embedded ? {\n binding: RewardBindingSchema.parse(embedded.binding),\n rewards: RewardReleaseSchema.array().parse(embedded.rewards),\n } : learning);\n if (taskset.metadata.rewardBinding !== undefined) {\n const reference = taskset.metadata.rewardBinding as Partial<RewardBinding> | null;\n if (!execution || !reference || reference.id !== execution.binding.id\n || reference.revision !== execution.binding.revision || reference.contentHash !== execution.binding.contentHash) {\n throw new Error(\"Portable Taskset requires its exact published Reward binding.\");\n }\n }\n if (execution) compileBoundGraders(execution.binding, execution.rewards);\n return execution ? { binding: execution.binding, rewards: execution.rewards } : null;\n}\n\nexport function materializePortableTasksetRelease(input: {\n taskset: Taskset;\n selectedTasks?: TaskDataRecord[];\n adapterId: string;\n admittedTasksetRelease?: TasksetRelease | null;\n rewardExecution?: TasksetRewardExecution;\n}): {\n environmentRelease: ReturnType<typeof createEnvironmentRelease>;\n verifierSetRelease: ReturnType<typeof createVerifierSetRelease>;\n tasksetRelease: TasksetRelease;\n} {\n const environment = portableEnvironment(input.taskset);\n const tools = portableTools(input.taskset);\n const learning = input.taskset.metadata.learning === undefined ? null : TaskBatchPackageMetadataSchema.parse(input.taskset.metadata.learning);\n const embedded = input.taskset.metadata.rewardExecution;\n const rewardExecution = resolvePortableTasksetRewardExecution(input.taskset, input.rewardExecution);\n const graders = rewardExecution ? compileBoundGraders(rewardExecution.binding, rewardExecution.rewards) : input.taskset.graders.map(portableGrader);\n const tasks = input.selectedTasks?.length\n ? input.selectedTasks\n : input.taskset.tasks;\n if (!tasks.length) throw new Error(\"A portable Taskset release requires at least one task.\");\n const pinned = input.taskset.environment.metadata.portableExecutionResources as { environment?: unknown; verifierSet?: unknown } | undefined;\n if (environment.entrypoint === \"openpond.javascript-environment.v1\" && !pinned) throw new Error(\"Tool Taskset publication requires its pinned execution resources.\");\n const environmentRelease = pinned ? EnvironmentReleaseSchema.parse(pinned.environment) : createEnvironmentRelease({\n schemaVersion: \"openpond.environmentRelease.v1\",\n id: `environment-release-${input.taskset.id}-r${input.taskset.revision}`,\n revision: input.taskset.revision,\n contract: environment,\n actionSchemaRef: null,\n observationSchemaRef: null,\n stateSchemaRef: null,\n artifactCollection: {\n maxArtifacts: 100_000,\n maxTotalBytes: 250_000_000,\n },\n adapterConformanceHashes: {\n [input.adapterId]: contentHash({ adapterId: input.adapterId, environment, tools }),\n },\n metadata: {\n sourceTasksetId: input.taskset.id,\n sourcePackageHash: input.taskset.metadata.sourcePackageHash ?? null,\n resources: input.taskset.environment.resources ?? [],\n },\n });\n const verifierSetRelease = pinned?.verifierSet !== undefined ? VerifierSetReleaseSchema.parse(pinned.verifierSet) : createVerifierSetRelease({\n schemaVersion: \"openpond.verifierSetRelease.v1\",\n id: `verifier-set-release-${input.taskset.id}-r${input.taskset.revision}`,\n revision: input.taskset.revision,\n graders,\n isolation: {\n processBoundary: \"isolated_process\",\n networkPolicy: \"none\",\n defaultTimeoutMs: Math.min(input.taskset.environment.defaultTimeoutMs, 300_000),\n },\n calibrationReceiptRefs: [],\n metadata: { sourceTasksetId: input.taskset.id },\n });\n if (!verifyEnvironmentRelease(environmentRelease) || !verifyVerifierSetRelease(verifierSetRelease) ||\n contentHash(environmentRelease.contract) !== contentHash(environment) || contentHash(verifierSetRelease.graders) !== contentHash(graders)) {\n throw new Error(\"Taskset execution resources differ from its declared environment or graders.\");\n }\n const tasksetContent = TasksetReleaseContentSchema.parse({\n schemaVersion: \"openpond.tasksetRelease.v2\",\n id: input.taskset.metadata.derivedPortableMetadata === undefined ? `taskset-release-${input.taskset.id}-r${input.taskset.revision}` : input.taskset.id,\n revision: input.taskset.revision,\n policy: {\n policyVisibleFields: input.taskset.policy.policyVisibleFields,\n privilegedFields: input.taskset.policy.privilegedFields,\n hiddenGraderRefs: input.taskset.policy.hiddenGraderRefs,\n connectedAppScopes: input.taskset.policy.connectedAppScopes,\n },\n environment,\n tools,\n capabilities: portableCapabilities(input.taskset),\n tasks: tasks.map(projectPortableTaskRecord),\n graders,\n ...(input.taskset.metrics ? { metrics: input.taskset.metrics } : {}),\n metadata: input.taskset.metadata.derivedPortableMetadata ?? {\n sourceTasksetId: input.taskset.id,\n sourceTasksetHash: input.taskset.contentHash,\n sourcePackageHash: input.taskset.metadata.sourcePackageHash ?? null,\n environmentResources: input.taskset.environment.resources ?? [],\n workAssetStagingPaths: Object.fromEntries(tasks.filter(task => task.assets?.some(asset => asset.stagingPath))\n .map(task => [task.id, Object.fromEntries((task.assets ?? []).filter(asset => asset.stagingPath)\n .map(asset => [asset.id, asset.stagingPath]))])),\n ordinaryAuthoring: {\n instructions: input.taskset.objective,\n graderSourceRewards: Object.fromEntries(input.taskset.graders.filter(grader => grader.metadata.sourceReward !== undefined).map(grader => [grader.id, grader.metadata.sourceReward])),\n graderOrigins: Object.fromEntries(input.taskset.graders.map(grader => [grader.id,\n grader.metadata.preparationOrigin === \"reused\" ? \"reused\" : grader.metadata.preparationOrigin === \"adapted\" || grader.metadata.adaptedFromReward ? \"adapted\" : \"authored\"])),\n graderFixtures: input.taskset.graderFixtures,\n judgeCalibrationFixtures: Object.fromEntries(input.taskset.graders\n .filter(grader => grader.kind === \"model_judge\")\n .map(grader => [grader.id, grader.calibrationFixtureRefs])),\n },\n ...(learning ? { learning } : {}),\n // A sealed batch already pins these resources in learning metadata.\n // Resolving that same binding at admission must not change its release.\n ...(rewardExecution && !learning && (input.rewardExecution || embedded) ? { rewardExecution: { binding: rewardExecution.binding, rewards: rewardExecution.rewards } } : {}),\n },\n });\n const draft = input.admittedTasksetRelease\n ? TasksetReleaseSchema.parse(input.admittedTasksetRelease)\n : TasksetReleaseSchema.parse({\n ...tasksetContent,\n contentHash: contentHash(tasksetContent),\n });\n const tasksetRelease = draft.environmentRelease\n ? assertReleaseBindings({ draft, environmentRelease, verifierSetRelease })\n : bindTasksetExecutionReleases({\n taskset: draft,\n environment: environmentRelease,\n verifierSet: verifierSetRelease,\n });\n return { environmentRelease, verifierSetRelease, tasksetRelease };\n}\n\n/**\n * Admits a published comparison policy against the exact portable Taskset\n * release it names. A comparison is deliberately not embedded in that release:\n * doing so would create a content-hash cycle between Taskset and comparison.\n */\nexport function projectPreferenceComparisonRelease(input: {\n tasksetRelease: TasksetRelease;\n preferenceComparison: PreferenceComparisonRelease;\n}): PreferenceComparisonRelease {\n if (!verifyPreferenceComparisonRelease(input.preferenceComparison)) {\n throw new Error(\"Preference comparison release failed immutable content verification.\");\n }\n const release = input.preferenceComparison;\n if (\n release.tasksetRelease.id !== input.tasksetRelease.id\n || release.tasksetRelease.contentHash !== input.tasksetRelease.contentHash\n ) {\n throw new Error(\"Preference comparison release must reference the admitted portable Taskset release.\");\n }\n return release;\n}\n\nexport function portableTasksetEnvironment(taskset: Taskset): EnvironmentContract {\n return portableEnvironment(taskset);\n}\n\nexport function portableTasksetTools(taskset: Taskset): ToolDeclaration[] {\n return portableTools(taskset);\n}\n\n/** Preserve immutable file/schema references while overlaying current edits. */\nexport function projectPortableTaskRecord(task: TaskDataRecord) {\n const admitted = task.metadata.portableTaskRecord;\n if (admitted !== undefined) {\n const original = TaskRecordSchema.parse(admitted);\n const projected = TaskRecordSchema.parse({\n ...original,\n id: task.id,\n clusterKey: task.clusterKey,\n split: task.split,\n input: task.input,\n expectedOutput: portableExpectedOutput(task),\n policyVisibleContext: task.policyVisibleContext,\n privilegedContextRef: task.privilegedContextRef,\n tags: task.tags,\n artifactRefs: task.assets === undefined ? original.artifactRefs : task.assets.map((asset) => {\n const previous = original.artifactRefs.find(item => item.id === asset.id);\n return {\n id: asset.id,\n path: previous?.path ?? `tasks/${segment(task.id)}/${asset.stagingPath ?? segment(asset.fileName)}`,\n contentHash: hash(asset.sha256),\n sizeBytes: asset.sizeBytes,\n mediaType: asset.mediaType,\n visibility: previous?.visibility ?? \"policy\",\n };\n }),\n requiredOutputs: task.requiredOutputs === undefined ? original.requiredOutputs : task.requiredOutputs.map((output) => {\n const previous = original.requiredOutputs?.find(item => item.path === output.path);\n return {\n path: output.path,\n mediaType: output.mediaType,\n schemaRef: previous?.schemaRef && previous.schemaRef.id === output.schemaRef ? previous.schemaRef : null,\n maxBytes: output.maxBytes ?? null,\n metadata: {\n ...output.metadata,\n ...(output.schemaRef && previous?.schemaRef?.id !== output.schemaRef\n ? { legacySchemaRef: output.schemaRef }\n : {}),\n },\n };\n }),\n });\n if (projected.requiredOutputs === undefined) delete projected.requiredOutputs;\n return projected;\n }\n return {\n id: task.id,\n clusterKey: task.clusterKey,\n split: task.split,\n input: task.input,\n expectedOutput: portableExpectedOutput(task),\n policyVisibleContext: task.policyVisibleContext,\n privilegedContextRef: task.privilegedContextRef,\n artifactRefs: (task.assets ?? []).map((item) => ({\n id: item.id,\n path: `tasks/${segment(task.id)}/${item.stagingPath ?? segment(item.fileName)}`,\n contentHash: hash(item.sha256),\n sizeBytes: item.sizeBytes,\n mediaType: item.mediaType,\n visibility: \"policy\" as const,\n })),\n requiredOutputs: (task.requiredOutputs ?? []).map((output) => ({\n path: output.path,\n mediaType: output.mediaType,\n schemaRef: null,\n maxBytes: output.maxBytes ?? null,\n metadata: {\n ...output.metadata,\n legacySchemaRef: output.schemaRef ?? null,\n },\n })),\n tags: task.tags,\n };\n}\n\nfunction portableExpectedOutput(\n task: TaskDataRecord,\n): Record<string, unknown> | null {\n if (!task.expectedOutput) return null;\n if (\"artifactRenderer\" in task.expectedOutput) {\n throw new Error(\n `Task ${task.id} embeds an artifact renderer. Put shared renderer configuration in Environment resources and reference it from the Scenario.`,\n );\n }\n return task.expectedOutput;\n}\n\nfunction portableEnvironment(taskset: Taskset): EnvironmentContract {\n const kind: EnvironmentContract[\"kind\"] = taskset.environment.kind === \"chat\"\n ? \"text\"\n : taskset.environment.kind === \"work\" ? \"work\"\n : taskset.environment.kind === \"program\" ? \"custom_program\" : \"agent\";\n return {\n protocolVersion: \"openpond.environment.v1\",\n kind,\n entrypoint: taskset.environment.entrypoint,\n stateful: taskset.environment.stateful,\n deterministicSeeds: taskset.environment.deterministicSeeds,\n lifecycle: [\"create\", \"reset\", \"step\", \"collect\", \"destroy\"],\n networkPolicy: taskset.environment.networkPolicy,\n defaultTimeoutMs: taskset.environment.defaultTimeoutMs,\n };\n}\n\nfunction portableTools(taskset: Taskset): ToolDeclaration[] {\n const admitted = taskset.environment.metadata.portableTools;\n if (admitted !== undefined) {\n return ToolDeclarationSchema.array().max(200).parse(admitted);\n }\n const bindings = taskset.environment.actionBindings ?? [];\n if (bindings.length) return bindings.map((binding) => ({\n name: binding.modelToolName,\n description: binding.description,\n inputSchema: binding.inputSchema,\n inputSchemaHash: hash(binding.actionSchemaHash),\n sideEffect: binding.sideEffect,\n timeoutMs: binding.timeoutMs,\n }));\n return taskset.environment.toolNames.map((name) => ({\n name,\n description: `Host-provided ${name} tool.`,\n inputSchema: {},\n inputSchemaHash: contentHash({}),\n sideEffect: \"write\" as const,\n timeoutMs: taskset.environment.defaultTimeoutMs,\n }));\n}\n\nfunction portableGrader(grader: GraderSpec): PortableGraderSpec {\n const base = {\n id: grader.id,\n ...(grader.taskIds ? { taskIds: grader.taskIds } : {}),\n version: grader.version,\n weight: grader.weight,\n hardGate: grader.hardGate,\n rewardEligible: grader.rewardEligible,\n privileged: grader.privileged,\n };\n if (grader.kind === \"model_judge\") return {\n ...base,\n kind: \"model_judge\",\n rubricRef: rubricAsset(grader),\n model: modelJudgeRef(grader),\n temperature: grader.temperature,\n calibrationStatus: grader.calibrationStatus,\n };\n if (grader.kind === \"custom_verifier\") {\n if (grader.metadata.portableVerifierRef === undefined) {\n throw new Error(`Custom verifier ${grader.id} requires its immutable executable asset before publication.`);\n }\n const imported = PortableGraderSpecSchema.safeParse(grader.metadata.portableGrader);\n // An omitted portable export means \"verify\". Preserve that encoding on an\n // unchanged import so executing it does not silently replace its release.\n const preserveDefault = imported.success && imported.data.kind === \"custom_verifier\"\n && imported.data.exportName === undefined && grader.exportName === \"verify\";\n return {\n ...base,\n kind: \"custom_verifier\",\n ...(grader.runtime === undefined ? {} : { runtime: grader.runtime }),\n verifierRef: ImmutableAssetRefSchema.parse(grader.metadata.portableVerifierRef),\n timeoutMs: grader.timeoutMs,\n ...(preserveDefault ? {} : { exportName: grader.exportName }),\n networkPolicy: \"none\",\n };\n }\n if (grader.kind === \"human\") return {\n ...base,\n kind: \"human\",\n rubricRef: rubricAsset(grader),\n reviewerRole: grader.reviewerRole,\n ...(grader.form ? { form: grader.form } : {}),\n };\n return {\n ...base,\n ...portableDeterministicCheck(grader),\n };\n}\n\nfunction portableCapabilities(taskset: Taskset) {\n const admitted = taskset.metadata.portableCapabilities;\n if (admitted !== undefined) {\n return CapabilityRequirementSchema.array().max(200).parse(admitted);\n }\n return [\n ...(taskset.capabilities.requiresTools\n ? [{ id: \"tools\", required: true, scopes: taskset.environment.toolNames }]\n : []),\n ...(taskset.capabilities.requiresState\n ? [{ id: \"local-state\", required: true, scopes: [] }]\n : []),\n ...(taskset.capabilities.requiresPrivilegedGrading\n ? [{ id: \"private-verifier\", required: true, scopes: taskset.policy.hiddenGraderRefs }]\n : []),\n ...taskset.policy.connectedAppScopes.map((scope) => ({\n id: `connected-app-${segment(scope)}`,\n required: true,\n scopes: [scope],\n })),\n ].map((requirement) => ({\n ...requirement,\n portability: requirement.id === \"local-state\" ? \"host_adapter\" as const : \"portable\" as const,\n }));\n}\n\nfunction assertReleaseBindings(input: {\n draft: TasksetRelease;\n environmentRelease: ReturnType<typeof createEnvironmentRelease>;\n verifierSetRelease: ReturnType<typeof createVerifierSetRelease>;\n}): TasksetRelease {\n if (\n input.draft.environmentRelease?.id !== input.environmentRelease.id\n || input.draft.environmentRelease.contentHash !== input.environmentRelease.contentHash\n ) {\n throw new Error(\"Admitted Taskset Release binds a different Environment Release.\");\n }\n if (\n input.draft.verifierSetRelease?.id !== input.verifierSetRelease.id\n || input.draft.verifierSetRelease.contentHash !== input.verifierSetRelease.contentHash\n ) {\n throw new Error(\"Admitted Taskset Release binds a different Verifier Set Release.\");\n }\n if (contentHash(input.draft.environment) !== contentHash(input.environmentRelease.contract)) {\n throw new Error(\"Admitted Taskset Environment differs from its bound Environment Release.\");\n }\n if (contentHash(input.draft.graders) !== contentHash(input.verifierSetRelease.graders)) {\n throw new Error(\"Admitted Taskset graders differ from its bound Verifier Set Release.\");\n }\n return input.draft;\n}\n\nfunction modelJudgeRef(grader: Extract<GraderSpec, { kind: \"model_judge\" }>) {\n const previous = grader.metadata.portableGrader === undefined ? null : PortableGraderSpecSchema.parse(grader.metadata.portableGrader);\n const revision = previous?.kind === \"model_judge\" && previous.model?.providerId === grader.judge.providerId && previous.model.modelId === grader.judge.modelId ? previous.model.revision : null;\n return { ...grader.judge, revision };\n}\n\nfunction rubricAsset(grader: Extract<GraderSpec, { kind: \"human\" | \"model_judge\" }>): ImmutableAssetRef {\n const contentHash = sha256(grader.rubric);\n const sizeBytes = new TextEncoder().encode(grader.rubric).byteLength;\n const reference = grader.metadata.portableRubricRef;\n if (reference !== undefined) {\n const asset = ImmutableAssetRefSchema.parse(reference);\n if (asset.contentHash !== contentHash || asset.sizeBytes !== sizeBytes || asset.visibility === \"policy\") throw new Error(\"Taskset rubric differs from its published private source.\");\n return asset;\n }\n return { id: `rubric-${grader.id}`, path: `graders/${segment(grader.id)}/rubric.md`, contentHash, sizeBytes, mediaType: \"text/markdown\", visibility: \"verifier\" };\n}\n\nfunction hash(value: string): string {\n return /^[a-f0-9]{64}$/.test(value) ? value : contentHash(value);\n}\n\nfunction segment(value: string): string {\n const normalized = value.trim().replace(/[^a-zA-Z0-9._-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n return normalized || \"asset\";\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["contentHash"]
7
+ }
@@ -31,7 +31,7 @@ import {
31
31
  hashCollectorEligibleBoundaries,
32
32
  summarizeCollectorCoverage,
33
33
  verifyConnectedRecordedExecution
34
- } from "./chunk-7GA57BEJ.js";
34
+ } from "./chunk-FWX7SH7Y.js";
35
35
  import {
36
36
  AgentImportCommitRequestSchema,
37
37
  AgentImportFileSchema,
@@ -43,16 +43,20 @@ import {
43
43
  ConnectedHomeQuerySchema,
44
44
  ConnectedHomeSummarySchema,
45
45
  ConnectedScopeSchema,
46
- ConnectedSourceSummarySchema
47
- } from "./chunk-ILXO64IV.js";
48
- import "./chunk-NFLEPINR.js";
49
- import "./chunk-NA7PNRQZ.js";
46
+ ConnectedSourceSummarySchema,
47
+ ConnectedStartingAssetSchema,
48
+ ConnectedStartingAssetsReceiptSchema,
49
+ ConnectedStartingAssetsRequestSchema,
50
+ verifyConnectedStartingAssetsReceipt
51
+ } from "./chunk-SVBV2VEK.js";
52
+ import "./chunk-BDDT6VN6.js";
53
+ import "./chunk-WYGBGCRO.js";
50
54
  import "./chunk-K3JCP4FO.js";
51
- import "./chunk-IPWCUGDN.js";
52
- import "./chunk-IS3P4OOW.js";
55
+ import "./chunk-YRTA3G6O.js";
56
+ import "./chunk-X6J3VVYC.js";
53
57
  import {
54
58
  ConnectedDatasetSourceRefSchema
55
- } from "./chunk-OLHLJ2X3.js";
59
+ } from "./chunk-644E3NM2.js";
56
60
  import "./chunk-2U54EOXJ.js";
57
61
  import "./chunk-TTAFUUHZ.js";
58
62
  import "./chunk-OEPYLZXK.js";
@@ -97,6 +101,9 @@ export {
97
101
  ConnectedRecordedSummarySchema,
98
102
  ConnectedScopeSchema,
99
103
  ConnectedSourceSummarySchema,
104
+ ConnectedStartingAssetSchema,
105
+ ConnectedStartingAssetsReceiptSchema,
106
+ ConnectedStartingAssetsRequestSchema,
100
107
  ConnectedSyncClient,
101
108
  ConnectedSyncCommitSchema,
102
109
  ConnectedSyncConnectionSchema,
@@ -110,6 +117,7 @@ export {
110
117
  ConnectedUnmappedEventsSchema,
111
118
  hashCollectorEligibleBoundaries,
112
119
  summarizeCollectorCoverage,
113
- verifyConnectedRecordedExecution
120
+ verifyConnectedRecordedExecution,
121
+ verifyConnectedStartingAssetsReceipt
114
122
  };
115
123
  //# sourceMappingURL=connected-evidence.js.map
@@ -1,8 +1,9 @@
1
1
  import {
2
2
  TaskDesignProposalSchema
3
- } from "./chunk-2NBI5UOK.js";
3
+ } from "./chunk-FZYLRL7H.js";
4
4
  import {
5
5
  ConnectedCaseRefSchema,
6
+ ConnectedStartingAssetSchema,
6
7
  DatasetWorkspaceBeginVersionSchema,
7
8
  DatasetWorkspaceListQuerySchema,
8
9
  DatasetWorkspaceListSchema,
@@ -11,27 +12,30 @@ import {
11
12
  DatasetWorkspaceValidationSchema,
12
13
  DatasetWorkspaceVersionsSchema,
13
14
  DatasetWorkspaceWriteSchema
14
- } from "./chunk-ILXO64IV.js";
15
+ } from "./chunk-SVBV2VEK.js";
15
16
  import {
16
17
  compileTasksetDraftWorkspace
17
- } from "./chunk-NFLEPINR.js";
18
+ } from "./chunk-BDDT6VN6.js";
18
19
  import {
19
20
  TasksetDraftSchema,
20
21
  createTasksetDraft,
21
22
  createTasksetDraftFile,
22
23
  createTasksetDraftWorkspace,
23
24
  decodeTasksetDraftFileContent,
25
+ decodeTasksetDraftWorkspaceFile,
24
26
  validateTasksetDraftWorkspace
25
- } from "./chunk-NA7PNRQZ.js";
27
+ } from "./chunk-WYGBGCRO.js";
26
28
  import {
27
29
  TasksetCatalogReleaseRefSchema
28
30
  } from "./chunk-K3JCP4FO.js";
29
- import "./chunk-IPWCUGDN.js";
30
- import "./chunk-IS3P4OOW.js";
31
+ import "./chunk-YRTA3G6O.js";
32
+ import "./chunk-X6J3VVYC.js";
31
33
  import {
32
34
  TaskDataRecordSchema,
35
+ TaskRequiredOutputSchema,
36
+ TasksetEnvironmentContractSchema,
33
37
  TasksetSourceRefSchema
34
- } from "./chunk-OLHLJ2X3.js";
38
+ } from "./chunk-644E3NM2.js";
35
39
  import "./chunk-2U54EOXJ.js";
36
40
  import "./chunk-TTAFUUHZ.js";
37
41
  import "./chunk-OEPYLZXK.js";
@@ -156,6 +160,7 @@ var DatasetPreparationPolicySchema = z2.object({
156
160
  modelId: Id,
157
161
  maximumOutputTokens: z2.number().int().min(1).max(32768)
158
162
  }).strict(),
163
+ adjudicator: z2.object({ modelId: Id, maximumOutputTokens: z2.number().int().min(1).max(32768) }).strict(),
159
164
  grading: z2.discriminatedUnion("mode", [
160
165
  z2.object({ mode: z2.literal("auto") }).strict(),
161
166
  z2.object({ mode: z2.literal("existing_only") }).strict(),
@@ -372,6 +377,7 @@ var PreparedTaskProvenanceSchema = z2.object({
372
377
  firstAvailableAt: Timestamp,
373
378
  initialInputHash: Hash,
374
379
  initialEnvironmentHash: Hash,
380
+ initialAssetsHash: Hash.nullable(),
375
381
  sourceScopeHash: Hash
376
382
  }).strict().superRefine((value, ctx) => {
377
383
  if (!value.sourceSpans.some((span) => span.role === "requirement"))
@@ -953,15 +959,104 @@ var DatasetPreparationResearchDecisionSchema = z5.object({
953
959
  contextSummary: z5.string().max(2e4)
954
960
  }).strict();
955
961
 
962
+ // src/dataset-preparation-starting-state.ts
963
+ import { z as z6 } from "zod";
964
+ var Hash3 = z6.string().regex(/^[a-f0-9]{64}$/);
965
+ function connectedStartingAssetReference(receiptId, path) {
966
+ if (!/^starting-assets-[a-f0-9]{40}$/.test(receiptId)) throw new Error("Invalid starting asset receipt.");
967
+ ConnectedStartingAssetSchema.shape.path.parse(path);
968
+ return `starting-assets:${receiptId}#${encodeURIComponent(path)}`;
969
+ }
970
+ function parseConnectedStartingAssetReference(reference) {
971
+ const match = /^starting-assets:(starting-assets-[a-f0-9]{40})#(.+)$/.exec(reference);
972
+ if (!match) throw new Error("Invalid starting asset reference.");
973
+ const path = decodeURIComponent(match[2]);
974
+ if (connectedStartingAssetReference(match[1], path) !== reference) throw new Error("Noncanonical starting asset reference.");
975
+ return { receiptId: match[1], path };
976
+ }
977
+ var PreparedRepositoryStartingStateSchema = z6.object({
978
+ schemaVersion: z6.literal("openpond.preparedRepositoryStartingState.v1"),
979
+ dependencyClosureQualified: z6.literal(false),
980
+ assets: z6.array(ConnectedStartingAssetSchema.extend({
981
+ receiptId: z6.string().regex(/^starting-assets-[a-f0-9]{40}$/),
982
+ receiptHash: Hash3,
983
+ source: ConnectedCaseRefSchema
984
+ }).strict()).min(1).max(100)
985
+ }).strict().superRefine((value, ctx) => {
986
+ if (new Set(value.assets.map((asset) => asset.path)).size !== value.assets.length)
987
+ ctx.addIssue({ code: "custom", message: "Starting paths must be distinct." });
988
+ if (value.assets.some((asset) => asset.commitHash !== value.assets[0].commitHash || contentHash(asset.source) !== contentHash(value.assets[0].source)))
989
+ ctx.addIssue({ code: "custom", message: "Starting assets must belong to one original task boundary and commit." });
990
+ });
991
+ function preparedRepositoryEnvironment() {
992
+ return TasksetEnvironmentContractSchema.parse({
993
+ protocolVersion: "openpond.taskEnvironment.v1",
994
+ kind: "work",
995
+ entrypoint: "openpond-work-v1",
996
+ stateful: true,
997
+ deterministicSeeds: true,
998
+ toolNames: ["work_exec", "work_save_output"],
999
+ lifecycle: ["create", "reset", "step", "grade", "cleanup"],
1000
+ defaultTimeoutMs: 3e5,
1001
+ networkPolicy: "none",
1002
+ resources: [],
1003
+ metadata: {
1004
+ requiredOutputs: [{
1005
+ path: "changes.patch",
1006
+ mediaType: "text/x-diff",
1007
+ maxBytes: 5e6,
1008
+ metadata: {
1009
+ protocol: "openpond.preparedRepositoryPatch.v1",
1010
+ baseDirectory: "starting-state",
1011
+ description: "Save a unified diff against the retained starting files, with original repository-relative paths."
1012
+ }
1013
+ }],
1014
+ maxInputBytes: 15 * 1024 * 1024
1015
+ }
1016
+ });
1017
+ }
1018
+
956
1019
  // src/dataset-preparation-workspace.ts
957
1020
  function createPreparedTaskAuthoringWorkspace(input) {
958
1021
  const provenance = PreparedTaskProvenanceSchema.parse(input.provenance);
959
1022
  const proposal = TaskDesignProposalSchema.parse(input.proposal);
960
- const sources = input.sources.map((source) => TasksetSourceRefSchema.parse(source));
1023
+ let sources = input.sources.map((source) => TasksetSourceRefSchema.parse(source));
961
1024
  const environment = TasksetDraftSchema.shape.environment.parse(input.initialEnvironment);
1025
+ const startingFiles = input.startingFiles ?? [];
1026
+ let workAssets;
1027
+ let retainedFiles = startingFiles;
962
1028
  if (contentHash(input.initialInput) !== provenance.initialInputHash || contentHash(environment) !== provenance.initialEnvironmentHash)
963
1029
  throw new Error("Prepared Taskset input or starting environment differs from its reconstruction.");
964
- if (environment.kind !== "chat" || environment.stateful || environment.toolNames.length || (environment.resources?.length ?? 0) || proposal.taskKind !== "chat" || proposal.diagnosis.requiredTools.length)
1030
+ if (environment.kind === "work") {
1031
+ const state = PreparedRepositoryStartingStateSchema.parse(input.startingAssets);
1032
+ if (contentHash(state) !== provenance.initialAssetsHash) throw new Error("Prepared starting assets differ from their reconstruction.");
1033
+ if (contentHash(preparedRepositoryEnvironment()) !== contentHash(environment) || proposal.taskKind !== "single_agent" || proposal.diagnosis.requiredTools.some((tool) => !environment.toolNames.includes(tool)))
1034
+ throw new Error("Repository preparation requires its fixed isolated Work protocol.");
1035
+ if (startingFiles.length !== state.assets.length || new Set(startingFiles.map((file) => file.path)).size !== startingFiles.length)
1036
+ throw new Error("Prepared starting files differ from the retained inventory.");
1037
+ for (const asset of state.assets) {
1038
+ const file = startingFiles.find((file2) => file2.path === `assets/starting-state/${asset.path}`);
1039
+ if (!file || file.contentHash !== asset.sha256 || file.sizeBytes !== asset.sizeBytes)
1040
+ throw new Error("Prepared starting files differ from the retained inventory.");
1041
+ decodeTasksetDraftWorkspaceFile(file);
1042
+ }
1043
+ for (const asset of state.assets) if (!sources.some((source) => "kind" in source && source.kind === "connected_activity" && source.id === asset.source.id && source.sourceHash === asset.source.snapshotHash))
1044
+ throw new Error("Prepared starting files require their exact connected source revision.");
1045
+ sources = sources.map((source) => "kind" in source && source.kind === "connected_activity" ? { ...source, sourceFileHashes: [...new Set(state.assets.filter((asset) => asset.source.id === source.id).map((asset) => asset.sha256))] } : source);
1046
+ workAssets = state.assets.map((asset) => ({
1047
+ id: `starting-file-${contentHash(asset.path).slice(0, 40)}`,
1048
+ sourceRefId: asset.source.id,
1049
+ artifactRef: `assets/${provenance.candidateId}/starting-state/${asset.path}`,
1050
+ fileName: asset.path.split("/").at(-1),
1051
+ stagingPath: `starting-state/${asset.path}`,
1052
+ mediaType: "application/octet-stream",
1053
+ sha256: asset.sha256,
1054
+ sizeBytes: asset.sizeBytes,
1055
+ split: "validation",
1056
+ metadata: { receiptId: asset.receiptId, receiptHash: asset.receiptHash, originalPath: asset.path, mode: asset.mode }
1057
+ }));
1058
+ retainedFiles = startingFiles.map((file) => ({ ...file, path: file.path.replace("assets/starting-state/", `assets/${provenance.candidateId}/starting-state/`) }));
1059
+ } else if (environment.kind !== "chat" || environment.stateful || environment.toolNames.length || (environment.resources?.length ?? 0) || proposal.taskKind !== "chat" || proposal.diagnosis.requiredTools.length || startingFiles.length || input.startingAssets || provenance.initialAssetsHash !== null)
965
1060
  throw new Error("Text preparation cannot silently add tools, state or starting assets.");
966
1061
  const sourceIds = new Set(sources.map((source) => source.id));
967
1062
  if (!sources.length || sourceIds.size !== sources.length || proposal.sourceIds.some((id) => !sourceIds.has(id)) || proposal.proposedExamples.length !== 1 || proposal.proposedExamples.some((example) => !sourceIds.has(example.sourceId)))
@@ -970,8 +1065,8 @@ function createPreparedTaskAuthoringWorkspace(input) {
970
1065
  throw new Error("Prepared Taskset authoring provenance is invalid.");
971
1066
  if (!proposal.proposedGraders.length || new Set(proposal.proposedGraders.map((grader) => grader.id)).size !== proposal.proposedGraders.length)
972
1067
  throw new Error("Prepared Taskset needs distinct outcome graders.");
973
- if (proposal.generatedFiles.some((file) => file.role === "environment"))
974
- throw new Error("Generated code cannot replace the fixed initial text environment.");
1068
+ if (proposal.generatedFiles.some((file) => file.role === "environment" || file.path === "assets" || file.path.startsWith("assets/")))
1069
+ throw new Error("Generated code cannot replace the fixed initial environment or starting files.");
975
1070
  if (proposal.graderFixtures.some((fixture) => fixture.taskIndex !== 0 || fixture.metadata.substituteExpectedOutput === true))
976
1071
  throw new Error("Prepared fixtures cannot refer to another task or substitute a historical answer.");
977
1072
  const draft = createTasksetDraft({
@@ -985,12 +1080,13 @@ function createPreparedTaskAuthoringWorkspace(input) {
985
1080
  draft.environment = environment;
986
1081
  draft.graders = proposal.proposedGraders.map((grader) => ({
987
1082
  ...grader,
1083
+ taskIds: [provenance.candidateId],
988
1084
  privileged: true,
989
1085
  ...grader.kind === "model_judge" ? { rewardEligible: false, calibrationStatus: "pending" } : {},
990
- metadata: { ...grader.metadata, preparedTask: provenance.candidateId, authoringSkillHash: input.skillHash }
1086
+ metadata: { ...grader.metadata, preparedRewardEligible: grader.rewardEligible, preparedTask: provenance.candidateId, authoringSkillHash: input.skillHash }
991
1087
  }));
992
1088
  draft.policy = {
993
- policyVisibleFields: ["input"],
1089
+ policyVisibleFields: environment.kind === "work" ? ["input", "requiredOutputs"] : ["input"],
994
1090
  privilegedFields: ["expectedOutput"],
995
1091
  hiddenGraderRefs: draft.graders.map((grader) => grader.id),
996
1092
  connectedAppScopes: []
@@ -1005,8 +1101,33 @@ function createPreparedTaskAuthoringWorkspace(input) {
1005
1101
  policyVisibleContext: {},
1006
1102
  privilegedContextRef: null,
1007
1103
  sourceRefs: [...sourceIds],
1104
+ ...environment.kind === "work" ? {
1105
+ assets: workAssets,
1106
+ requiredOutputs: TaskRequiredOutputSchema.array().min(1).max(100).parse(environment.metadata.requiredOutputs)
1107
+ } : {},
1008
1108
  tags: ["prepared-task", "development-exposed"],
1009
- metadata: { preparedTask: provenance, qualificationStatus: "pending" }
1109
+ metadata: {
1110
+ preparedTask: provenance,
1111
+ qualificationStatus: "pending",
1112
+ ...workAssets ? { portableTaskRecord: {
1113
+ id: provenance.candidateId,
1114
+ clusterKey: provenance.familyKey,
1115
+ split: "validation",
1116
+ input: input.initialInput,
1117
+ expectedOutput: null,
1118
+ policyVisibleContext: {},
1119
+ privilegedContextRef: null,
1120
+ artifactRefs: workAssets.map((asset) => ({
1121
+ id: asset.id,
1122
+ path: asset.artifactRef,
1123
+ contentHash: asset.sha256,
1124
+ sizeBytes: asset.sizeBytes,
1125
+ mediaType: asset.mediaType,
1126
+ visibility: "policy"
1127
+ })),
1128
+ tags: ["prepared-task", "development-exposed"]
1129
+ } } : {}
1130
+ }
1010
1131
  })];
1011
1132
  draft.graderFixtures = proposal.graderFixtures.map(({ taskIndex: _index, ...fixture }) => ({
1012
1133
  ...fixture,
@@ -1026,7 +1147,7 @@ function createPreparedTaskAuthoringWorkspace(input) {
1026
1147
  return createTasksetDraftWorkspace({
1027
1148
  schemaVersion: "openpond.tasksetDraftWorkspace.v1",
1028
1149
  draft,
1029
- files: proposal.generatedFiles.map((generated) => {
1150
+ files: [...retainedFiles, ...proposal.generatedFiles.map((generated) => {
1030
1151
  const file = createTasksetDraftFile(generated.path, new TextEncoder().encode(generated.content));
1031
1152
  return {
1032
1153
  path: file.path,
@@ -1034,7 +1155,153 @@ function createPreparedTaskAuthoringWorkspace(input) {
1034
1155
  sizeBytes: file.sizeBytes,
1035
1156
  base64: Buffer.from(decodeTasksetDraftFileContent(file.content)).toString("base64")
1036
1157
  };
1037
- })
1158
+ })]
1159
+ });
1160
+ }
1161
+
1162
+ // src/dataset-preparation-qualification-contracts.ts
1163
+ import { z as z7 } from "zod";
1164
+ var Id5 = z7.string().trim().min(1).max(240);
1165
+ var Text2 = z7.string().trim().min(1).max(2e4);
1166
+ var PreparedQualificationWitnessSchema = z7.object({
1167
+ id: Id5,
1168
+ label: z7.enum(["positive", "incorrect", "incomplete", "adversarial"]),
1169
+ output: z7.record(z7.string(), z7.unknown()),
1170
+ artifacts: z7.array(z7.object({
1171
+ path: TaskRequiredOutputSchema.shape.path,
1172
+ mediaType: TaskRequiredOutputSchema.shape.mediaType,
1173
+ base64: z7.string().max(8 * 1024 * 1024)
1174
+ }).strict()).max(100)
1175
+ }).strict().superRefine((value, ctx) => {
1176
+ if (new Set(value.artifacts.map((artifact) => artifact.path)).size !== value.artifacts.length)
1177
+ ctx.addIssue({ code: "custom", message: "Qualification artifacts must have distinct paths." });
1178
+ });
1179
+ var PreparedQualificationPlanSchema = z7.object({
1180
+ schemaVersion: z7.literal("openpond.preparedQualificationPlan.v1"),
1181
+ requirementRefs: z7.array(Id5).min(1).max(100),
1182
+ supported: z7.boolean(),
1183
+ limitations: z7.array(Text2).max(20),
1184
+ independentVerifier: z7.object({
1185
+ runtime: z7.enum(["isolated_javascript", "sandbox_process"]),
1186
+ source: z7.string().trim().min(1).max(2e5),
1187
+ exportName: z7.literal("verify"),
1188
+ timeoutMs: z7.number().int().min(1).max(6e4)
1189
+ }).strict().nullable(),
1190
+ witnesses: z7.array(PreparedQualificationWitnessSchema).max(20)
1191
+ }).strict().superRefine((value, ctx) => {
1192
+ if (new Set(value.requirementRefs).size !== value.requirementRefs.length || new Set(value.witnesses.map((item) => item.id)).size !== value.witnesses.length)
1193
+ ctx.addIssue({ code: "custom", message: "Qualification evidence identities must be distinct." });
1194
+ if (value.supported && (!value.independentVerifier || value.limitations.length || ["positive", "incorrect", "incomplete", "adversarial"].some((label) => !value.witnesses.some((witness) => witness.label === label))))
1195
+ ctx.addIssue({ code: "custom", message: "Supported qualification needs a complete verifier and witness population without unresolved evidence gaps." });
1196
+ });
1197
+ var PreparedWitnessAdjudicationSchema = z7.object({
1198
+ schemaVersion: z7.literal("openpond.preparedWitnessAdjudication.v1"),
1199
+ witnesses: z7.array(z7.object({
1200
+ id: Id5,
1201
+ failureMode: z7.enum(["none", "incorrect", "incomplete", "adversarial", "unverifiable"]),
1202
+ requirements: z7.array(z7.object({ reference: Id5, status: z7.enum(["satisfied", "violated", "unverifiable"]), reason: Text2 }).strict()).min(1).max(100)
1203
+ }).strict()).min(4).max(20)
1204
+ }).strict();
1205
+ var PreparedCheckerAuditSchema = z7.object({
1206
+ schemaVersion: z7.literal("openpond.preparedCheckerAudit.v1"),
1207
+ requirements: z7.array(z7.object({ reference: Id5, adequatelyChecked: z7.boolean(), oracleAdequatelyChecked: z7.boolean(), reason: Text2 }).strict()).min(1).max(100),
1208
+ executionIsolationPassed: z7.boolean(),
1209
+ futureEvidenceLeak: z7.boolean(),
1210
+ unresolvedLimitations: z7.array(Text2).max(20),
1211
+ passed: z7.boolean()
1212
+ }).strict();
1213
+
1214
+ // src/dataset-preparation-assembly.ts
1215
+ function assemblePreparedTaskWorkspaces(input) {
1216
+ const base = validateTasksetDraftWorkspace(input.base);
1217
+ const candidates = input.candidates.map(validateTasksetDraftWorkspace);
1218
+ if (!candidates.length || base.draft.status !== "draft" || candidates.some((workspace) => workspace.draft.profileId !== base.draft.profileId || workspace.draft.tasks.length !== 1))
1219
+ throw new Error("Prepared assembly requires owned individual task workspaces and an editable destination.");
1220
+ const environment = base.draft.tasks.length ? base.draft.environment : candidates[0].draft.environment;
1221
+ if (candidates.some((workspace) => contentHash(workspace.draft.environment) !== contentHash(environment)))
1222
+ throw new Error("Prepared tasks require separate versions for incompatible execution environments.");
1223
+ const tasks = [...base.draft.tasks], files = [...base.files], graders = base.draft.graders.map((grader) => ({
1224
+ ...grader,
1225
+ ...grader.taskIds ? {} : { taskIds: base.draft.tasks.map((task) => task.id) }
1226
+ }));
1227
+ if (!base.draft.tasks.length && graders.length) throw new Error("Destination graders require their original task population.");
1228
+ const sources = new Map(base.draft.sourceRefs.map((source) => [source.id, source]));
1229
+ const fixtures = [...base.draft.graderFixtures];
1230
+ const inventory = [...base.draft.metadata.portableFileInventory ?? []];
1231
+ const candidateIds = [];
1232
+ for (const workspace of candidates) {
1233
+ const task = workspace.draft.tasks[0];
1234
+ if (tasks.some((existing) => existing.id === task.id)) throw new Error("Prepared assembly repeats a task identity.");
1235
+ const provenance = task.metadata.preparedTask;
1236
+ if (provenance?.preparationId !== input.preparationId) throw new Error("Prepared task belongs to another run.");
1237
+ const sourceIds = new Map(workspace.draft.sourceRefs.map((source) => [source.id, `prepared-source-${contentHash([task.id, source.id]).slice(0, 40)}`]));
1238
+ candidateIds.push(task.id);
1239
+ tasks.push({
1240
+ ...task,
1241
+ sourceRefs: task.sourceRefs.map((id) => sourceIds.get(id)),
1242
+ ...task.assets ? { assets: task.assets.map((asset) => ({ ...asset, sourceRefId: sourceIds.get(asset.sourceRefId) })) } : {}
1243
+ });
1244
+ const namespace = `graders/${task.id}/`;
1245
+ for (const file of workspace.files) files.push({ ...file, path: file.path.startsWith("assets/") ? file.path : namespace + file.path });
1246
+ const graderIds = new Map(workspace.draft.graders.map((grader) => [grader.id, `prepared-grader-${contentHash([task.id, grader.id]).slice(0, 40)}`]));
1247
+ for (const grader of workspace.draft.graders) {
1248
+ const id = graderIds.get(grader.id);
1249
+ graders.push({
1250
+ ...grader,
1251
+ id,
1252
+ taskIds: [task.id],
1253
+ ...grader.kind === "custom_verifier" ? { module: namespace + grader.module } : {},
1254
+ metadata: { ...grader.metadata, preparedTask: task.id, composedFrom: { id: grader.id, contentHash: contentHash(grader) } }
1255
+ });
1256
+ }
1257
+ for (const fixture of workspace.draft.graderFixtures) {
1258
+ const projection = fixture.metadata.rewardCalibration;
1259
+ if (projection) fixtures.push({ ...fixture, metadata: { ...fixture.metadata, rewardCalibration: {
1260
+ ...projection,
1261
+ graderId: graderIds.get(projection.graderId ?? projection.sourceReward.id)
1262
+ } } });
1263
+ else fixtures.push({ ...fixture, id: `prepared-fixture-${contentHash([task.id, fixture.id]).slice(0, 40)}` });
1264
+ }
1265
+ for (const entry of workspace.draft.metadata.portableFileInventory ?? []) inventory.push({
1266
+ ...entry,
1267
+ sourcePath: entry.sourcePath.startsWith("assets/") ? entry.sourcePath : namespace + entry.sourcePath
1268
+ });
1269
+ for (const source of workspace.draft.sourceRefs) sources.set(sourceIds.get(source.id), {
1270
+ ...source,
1271
+ id: sourceIds.get(source.id),
1272
+ metadata: { ...source.metadata, assemblyOriginalSourceId: source.id }
1273
+ });
1274
+ }
1275
+ const policyVisibleFields = [...new Set(candidates.flatMap((workspace) => workspace.draft.policy.policyVisibleFields).concat(base.draft.tasks.length ? base.draft.policy.policyVisibleFields : []))];
1276
+ return createTasksetDraftWorkspace({
1277
+ schemaVersion: base.schemaVersion,
1278
+ files,
1279
+ draft: {
1280
+ ...base.draft,
1281
+ name: base.draft.name.trim() || `Prepared ${candidates.length} tasks`,
1282
+ objective: base.draft.objective.trim() || candidates.map((workspace) => workspace.draft.objective).join("\n").slice(0, 5e4),
1283
+ revision: input.revision,
1284
+ updatedAt: input.now,
1285
+ environment,
1286
+ tasks,
1287
+ graders,
1288
+ graderFixtures: fixtures,
1289
+ sourceRefs: [...sources.values()],
1290
+ policy: {
1291
+ ...base.draft.policy,
1292
+ policyVisibleFields,
1293
+ privilegedFields: [.../* @__PURE__ */ new Set(["expectedOutput", ...base.draft.policy.privilegedFields])],
1294
+ hiddenGraderRefs: graders.map((grader) => grader.id)
1295
+ },
1296
+ metadata: { ...base.draft.metadata, portableFileInventory: inventory, datasetPreparation: {
1297
+ schemaVersion: "openpond.datasetPreparationAssembly.v1",
1298
+ preparationId: input.preparationId,
1299
+ candidateIds,
1300
+ baseWorkspaceHash: base.contentHash,
1301
+ authoredWorkspaceHashes: candidates.map((workspace) => workspace.contentHash),
1302
+ qualification: "pending"
1303
+ } }
1304
+ }
1038
1305
  });
1039
1306
  }
1040
1307
  export {
@@ -1071,10 +1338,19 @@ export {
1071
1338
  OpenPondDatasetPopulationClient,
1072
1339
  OpenPondDatasetPreparationClient,
1073
1340
  OpenPondDatasetWorkspaceClient,
1341
+ PreparedCheckerAuditSchema,
1342
+ PreparedQualificationPlanSchema,
1343
+ PreparedQualificationWitnessSchema,
1344
+ PreparedRepositoryStartingStateSchema,
1074
1345
  PreparedTaskEvidenceSpanSchema,
1075
1346
  PreparedTaskProvenanceSchema,
1076
1347
  PreparedTaskQualificationSchema,
1348
+ PreparedWitnessAdjudicationSchema,
1349
+ assemblePreparedTaskWorkspaces,
1077
1350
  compileTasksetDraftWorkspace,
1078
- createPreparedTaskAuthoringWorkspace
1351
+ connectedStartingAssetReference,
1352
+ createPreparedTaskAuthoringWorkspace,
1353
+ parseConnectedStartingAssetReference,
1354
+ preparedRepositoryEnvironment
1079
1355
  };
1080
1356
  //# sourceMappingURL=dataset-workspaces.js.map