openpond-sdk 0.11.6 → 0.12.1

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 (150) hide show
  1. package/TASKSETS.md +13 -0
  2. package/dist/{chunk-A3ZYHREX.js → chunk-6Q4I33CH.js} +2 -2
  3. package/dist/{chunk-IS3P4OOW.js → chunk-7AZDNZP6.js} +9 -6
  4. package/dist/{chunk-IS3P4OOW.js.map → chunk-7AZDNZP6.js.map} +2 -2
  5. package/dist/{chunk-ILXO64IV.js → chunk-7GYXC2AI.js} +58 -3
  6. package/dist/chunk-7GYXC2AI.js.map +7 -0
  7. package/dist/{chunk-KV6JXPQH.js → chunk-DUKW3R7O.js} +1 -1
  8. package/dist/chunk-DUKW3R7O.js.map +7 -0
  9. package/dist/{chunk-64HOO3TO.js → chunk-ENLQCKY6.js} +2 -2
  10. package/dist/{chunk-OLHLJ2X3.js → chunk-FHCSDXIA.js} +10 -2
  11. package/dist/chunk-FHCSDXIA.js.map +7 -0
  12. package/dist/{chunk-PL3ETQYC.js → chunk-HKWX624G.js} +2 -2
  13. package/dist/{chunk-7GA57BEJ.js → chunk-MLFKQ7E7.js} +19 -3
  14. package/dist/chunk-MLFKQ7E7.js.map +7 -0
  15. package/dist/{chunk-UVREOAMH.js → chunk-O5ARJVT5.js} +2 -2
  16. package/dist/{chunk-JPPOMXMY.js → chunk-PGBFI5HC.js} +4 -4
  17. package/dist/chunk-PGBFI5HC.js.map +7 -0
  18. package/dist/{chunk-IPWCUGDN.js → chunk-ROBAX5TN.js} +11 -4
  19. package/dist/chunk-ROBAX5TN.js.map +7 -0
  20. package/dist/{chunk-I3QQEXDY.js → chunk-VOL3WES2.js} +13 -11
  21. package/dist/chunk-VOL3WES2.js.map +7 -0
  22. package/dist/{chunk-NFLEPINR.js → chunk-VSRTJDVB.js} +5 -5
  23. package/dist/{chunk-NA7PNRQZ.js → chunk-WNH4DOEC.js} +3 -3
  24. package/dist/{chunk-2NBI5UOK.js → chunk-WVISXXIL.js} +3 -3
  25. package/dist/{chunk-TTAFUUHZ.js → chunk-YVFERCUC.js} +9 -5
  26. package/dist/chunk-YVFERCUC.js.map +7 -0
  27. package/dist/connected-evidence.js +19 -11
  28. package/dist/dataset-workspaces.js +295 -19
  29. package/dist/dataset-workspaces.js.map +4 -4
  30. package/dist/experiment-evaluation-schedules.js +11 -11
  31. package/dist/experiment-improvements.js +2 -2
  32. package/dist/experiments.js +11 -11
  33. package/dist/index.js +23 -15
  34. package/dist/index.js.map +1 -1
  35. package/dist/model-starter-catalog.js +4 -4
  36. package/dist/model-starters.js +4 -4
  37. package/dist/taskset-drafts.js +8 -8
  38. package/dist/taskset-drafts.js.map +2 -2
  39. package/dist/taskset-packages.js +10 -10
  40. package/dist/training-bundle.js +8 -13
  41. package/dist/training-bundle.js.map +2 -2
  42. package/dist/training.js +2 -2
  43. package/dist/types/packages/sdk/src/connected-dataset-source.d.ts +1 -0
  44. package/dist/types/packages/sdk/src/connected-dataset-source.d.ts.map +1 -1
  45. package/dist/types/packages/sdk/src/connected-evidence-client.d.ts +71 -0
  46. package/dist/types/packages/sdk/src/connected-evidence-client.d.ts.map +1 -1
  47. package/dist/types/packages/sdk/src/connected-evidence.d.ts +1 -0
  48. package/dist/types/packages/sdk/src/connected-evidence.d.ts.map +1 -1
  49. package/dist/types/packages/sdk/src/connected-starting-assets.d.ts +98 -0
  50. package/dist/types/packages/sdk/src/connected-starting-assets.d.ts.map +1 -0
  51. package/dist/types/packages/sdk/src/dataset-preparation-assembly.d.ts +11 -0
  52. package/dist/types/packages/sdk/src/dataset-preparation-assembly.d.ts.map +1 -0
  53. package/dist/types/packages/sdk/src/dataset-preparation-authoring-contracts.d.ts +11 -0
  54. package/dist/types/packages/sdk/src/dataset-preparation-authoring-contracts.d.ts.map +1 -1
  55. package/dist/types/packages/sdk/src/dataset-preparation-client.d.ts +21 -0
  56. package/dist/types/packages/sdk/src/dataset-preparation-client.d.ts.map +1 -1
  57. package/dist/types/packages/sdk/src/dataset-preparation-contracts.d.ts +18 -0
  58. package/dist/types/packages/sdk/src/dataset-preparation-contracts.d.ts.map +1 -1
  59. package/dist/types/packages/sdk/src/dataset-preparation-qualification-contracts.d.ts +89 -0
  60. package/dist/types/packages/sdk/src/dataset-preparation-qualification-contracts.d.ts.map +1 -0
  61. package/dist/types/packages/sdk/src/dataset-preparation-starting-state.d.ts +76 -0
  62. package/dist/types/packages/sdk/src/dataset-preparation-starting-state.d.ts.map +1 -0
  63. package/dist/types/packages/sdk/src/dataset-preparation-workspace.d.ts +10 -0
  64. package/dist/types/packages/sdk/src/dataset-preparation-workspace.d.ts.map +1 -1
  65. package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts +42 -0
  66. package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts.map +1 -1
  67. package/dist/types/packages/sdk/src/dataset-workspace-contracts.d.ts +12 -0
  68. package/dist/types/packages/sdk/src/dataset-workspace-contracts.d.ts.map +1 -1
  69. package/dist/types/packages/sdk/src/dataset-workspace-operations.d.ts +12 -0
  70. package/dist/types/packages/sdk/src/dataset-workspace-operations.d.ts.map +1 -1
  71. package/dist/types/packages/sdk/src/dataset-workspaces.d.ts +3 -0
  72. package/dist/types/packages/sdk/src/dataset-workspaces.d.ts.map +1 -1
  73. package/dist/types/packages/sdk/src/learning-batch-assets.d.ts +1 -0
  74. package/dist/types/packages/sdk/src/learning-batch-assets.d.ts.map +1 -1
  75. package/dist/types/packages/sdk/src/model-batch-review-contracts.d.ts +5 -0
  76. package/dist/types/packages/sdk/src/model-batch-review-contracts.d.ts.map +1 -1
  77. package/dist/types/packages/sdk/src/model-batch-review-preparation.d.ts +1 -0
  78. package/dist/types/packages/sdk/src/model-batch-review-preparation.d.ts.map +1 -1
  79. package/dist/types/packages/sdk/src/model-batch-review.d.ts +5 -2
  80. package/dist/types/packages/sdk/src/model-batch-review.d.ts.map +1 -1
  81. package/dist/types/packages/sdk/src/model-starter-attempts.d.ts +4 -1
  82. package/dist/types/packages/sdk/src/model-starter-attempts.d.ts.map +1 -1
  83. package/dist/types/packages/sdk/src/model-starter-catalog.d.ts +9 -0
  84. package/dist/types/packages/sdk/src/model-starter-catalog.d.ts.map +1 -1
  85. package/dist/types/packages/sdk/src/model-starter-execution.d.ts +4 -0
  86. package/dist/types/packages/sdk/src/model-starter-execution.d.ts.map +1 -1
  87. package/dist/types/packages/sdk/src/model-starters.d.ts +18 -0
  88. package/dist/types/packages/sdk/src/model-starters.d.ts.map +1 -1
  89. package/dist/types/packages/sdk/src/model-taskset-derivation.d.ts +13 -0
  90. package/dist/types/packages/sdk/src/model-taskset-derivation.d.ts.map +1 -1
  91. package/dist/types/packages/sdk/src/model-taskset-resources.d.ts +4 -0
  92. package/dist/types/packages/sdk/src/model-taskset-resources.d.ts.map +1 -1
  93. package/dist/types/packages/sdk/src/profile-external-dataset-package.d.ts +17 -2
  94. package/dist/types/packages/sdk/src/profile-external-dataset-package.d.ts.map +1 -1
  95. package/dist/types/packages/sdk/src/task-design-contracts.d.ts +4 -0
  96. package/dist/types/packages/sdk/src/task-design-contracts.d.ts.map +1 -1
  97. package/dist/types/packages/sdk/src/taskset-authored-contracts.d.ts +6 -0
  98. package/dist/types/packages/sdk/src/taskset-authored-contracts.d.ts.map +1 -1
  99. package/dist/types/packages/sdk/src/taskset-authored-files.d.ts +6 -0
  100. package/dist/types/packages/sdk/src/taskset-authored-files.d.ts.map +1 -1
  101. package/dist/types/packages/sdk/src/taskset-authored-portable-release.d.ts.map +1 -1
  102. package/dist/types/packages/sdk/src/taskset-calibration-fixtures.d.ts +5 -0
  103. package/dist/types/packages/sdk/src/taskset-calibration-fixtures.d.ts.map +1 -1
  104. package/dist/types/packages/sdk/src/taskset-draft-api-contracts.d.ts +12 -0
  105. package/dist/types/packages/sdk/src/taskset-draft-api-contracts.d.ts.map +1 -1
  106. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts +36 -0
  107. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts.map +1 -1
  108. package/dist/types/packages/sdk/src/taskset-draft-core.d.ts +11 -0
  109. package/dist/types/packages/sdk/src/taskset-draft-core.d.ts.map +1 -1
  110. package/dist/types/packages/sdk/src/taskset-draft-document.d.ts +7 -0
  111. package/dist/types/packages/sdk/src/taskset-draft-document.d.ts.map +1 -1
  112. package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts +34 -4
  113. package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts.map +1 -1
  114. package/dist/types/packages/sdk/src/taskset-draft-source.d.ts +12 -0
  115. package/dist/types/packages/sdk/src/taskset-draft-source.d.ts.map +1 -1
  116. package/dist/types/packages/sdk/src/taskset-draft-workspace.d.ts +12 -0
  117. package/dist/types/packages/sdk/src/taskset-draft-workspace.d.ts.map +1 -1
  118. package/dist/types/packages/sdk/src/taskset-package-client.d.ts +68 -0
  119. package/dist/types/packages/sdk/src/taskset-package-client.d.ts.map +1 -1
  120. package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts +35 -0
  121. package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts.map +1 -1
  122. package/dist/types/packages/sdk/src/taskset-package-grader-projection.d.ts +4 -0
  123. package/dist/types/packages/sdk/src/taskset-package-grader-projection.d.ts.map +1 -1
  124. package/dist/types/packages/sdk/src/taskset-package-learning.d.ts +8 -2
  125. package/dist/types/packages/sdk/src/taskset-package-learning.d.ts.map +1 -1
  126. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts +29 -7
  127. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts.map +1 -1
  128. package/dist/types/packages/sdk/src/training-bundle.d.ts.map +1 -1
  129. package/dist/types/packages/sdk/src/training-harness-sources.d.ts +118 -2
  130. package/dist/types/packages/sdk/src/training-harness-sources.d.ts.map +1 -1
  131. package/dist/types/packages/sdk/src/training-learning-batch.d.ts +20 -0
  132. package/dist/types/packages/sdk/src/training-learning-batch.d.ts.map +1 -1
  133. package/dist/types/packages/sdk/src/training.d.ts +117 -1
  134. package/dist/types/packages/sdk/src/training.d.ts.map +1 -1
  135. package/package.json +3 -3
  136. package/dist/chunk-7GA57BEJ.js.map +0 -7
  137. package/dist/chunk-I3QQEXDY.js.map +0 -7
  138. package/dist/chunk-ILXO64IV.js.map +0 -7
  139. package/dist/chunk-IPWCUGDN.js.map +0 -7
  140. package/dist/chunk-JPPOMXMY.js.map +0 -7
  141. package/dist/chunk-KV6JXPQH.js.map +0 -7
  142. package/dist/chunk-OLHLJ2X3.js.map +0 -7
  143. package/dist/chunk-TTAFUUHZ.js.map +0 -7
  144. /package/dist/{chunk-A3ZYHREX.js.map → chunk-6Q4I33CH.js.map} +0 -0
  145. /package/dist/{chunk-64HOO3TO.js.map → chunk-ENLQCKY6.js.map} +0 -0
  146. /package/dist/{chunk-PL3ETQYC.js.map → chunk-HKWX624G.js.map} +0 -0
  147. /package/dist/{chunk-UVREOAMH.js.map → chunk-O5ARJVT5.js.map} +0 -0
  148. /package/dist/{chunk-NFLEPINR.js.map → chunk-VSRTJDVB.js.map} +0 -0
  149. /package/dist/{chunk-NA7PNRQZ.js.map → chunk-WNH4DOEC.js.map} +0 -0
  150. /package/dist/{chunk-2NBI5UOK.js.map → chunk-WVISXXIL.js.map} +0 -0
@@ -1,8 +1,9 @@
1
1
  import {
2
2
  TaskDesignProposalSchema
3
- } from "./chunk-2NBI5UOK.js";
3
+ } from "./chunk-WVISXXIL.js";
4
4
  import {
5
5
  ConnectedCaseRefSchema,
6
+ ConnectedStartingAssetSchema,
6
7
  DatasetWorkspaceBeginVersionSchema,
7
8
  DatasetWorkspaceListQuerySchema,
8
9
  DatasetWorkspaceListSchema,
@@ -11,32 +12,35 @@ import {
11
12
  DatasetWorkspaceValidationSchema,
12
13
  DatasetWorkspaceVersionsSchema,
13
14
  DatasetWorkspaceWriteSchema
14
- } from "./chunk-ILXO64IV.js";
15
+ } from "./chunk-7GYXC2AI.js";
15
16
  import {
16
17
  compileTasksetDraftWorkspace
17
- } from "./chunk-NFLEPINR.js";
18
+ } from "./chunk-VSRTJDVB.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-WNH4DOEC.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-ROBAX5TN.js";
32
+ import "./chunk-7AZDNZP6.js";
31
33
  import {
32
34
  TaskDataRecordSchema,
35
+ TaskRequiredOutputSchema,
36
+ TasksetEnvironmentContractSchema,
33
37
  TasksetSourceRefSchema
34
- } from "./chunk-OLHLJ2X3.js";
38
+ } from "./chunk-FHCSDXIA.js";
35
39
  import "./chunk-2U54EOXJ.js";
36
- import "./chunk-TTAFUUHZ.js";
40
+ import "./chunk-YVFERCUC.js";
37
41
  import "./chunk-OEPYLZXK.js";
38
42
  import "./chunk-YSKUXQ2N.js";
39
- import "./chunk-KV6JXPQH.js";
43
+ import "./chunk-DUKW3R7O.js";
40
44
  import "./chunk-KAE7AMYE.js";
41
45
  import {
42
46
  ExperimentGraderPinSchema
@@ -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