openpond-sdk 0.11.5 → 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 (208) hide show
  1. package/TASKSETS.md +13 -0
  2. package/dist/advanced-refiner-evaluations.js +6 -6
  3. package/dist/candidate-evaluations.js +5 -5
  4. package/dist/{chunk-2G4WBMYI.js → chunk-32GJS7FV.js} +6 -6
  5. package/dist/{chunk-Z4OLAEPL.js → chunk-644E3NM2.js} +10 -3
  6. package/dist/chunk-644E3NM2.js.map +7 -0
  7. package/dist/{chunk-YGLTO26A.js → chunk-7L4NIEW2.js} +2 -2
  8. package/dist/{chunk-VEU3IXAQ.js → chunk-7MISLCN2.js} +2 -2
  9. package/dist/{chunk-WTHJ3H4M.js → chunk-7WUJBFCH.js} +2 -2
  10. package/dist/{chunk-PHETIB6R.js → chunk-AV5JV26B.js} +2 -2
  11. package/dist/{chunk-Z4JJS6KE.js → chunk-B7VYE7YQ.js} +2 -2
  12. package/dist/{chunk-AQGFJLIV.js → chunk-BDDT6VN6.js} +5 -5
  13. package/dist/{chunk-DUJXF7YI.js → chunk-CK3ONRRC.js} +71 -59
  14. package/dist/chunk-CK3ONRRC.js.map +7 -0
  15. package/dist/{chunk-PMBBNQ2J.js → chunk-D4WTE6ZA.js} +2 -2
  16. package/dist/{chunk-ZOXHSJWU.js → chunk-DBRRQASP.js} +2 -2
  17. package/dist/{chunk-FZH2M4G6.js → chunk-DG5CRENU.js} +2 -2
  18. package/dist/{chunk-P3BRSSRD.js → chunk-FWX7SH7Y.js} +307 -258
  19. package/dist/chunk-FWX7SH7Y.js.map +7 -0
  20. package/dist/chunk-FZYLRL7H.js +100 -0
  21. package/dist/chunk-FZYLRL7H.js.map +7 -0
  22. package/dist/{chunk-JOKRT4CK.js → chunk-KV6JXPQH.js} +5 -2
  23. package/dist/{chunk-JOKRT4CK.js.map → chunk-KV6JXPQH.js.map} +2 -2
  24. package/dist/{chunk-HAOPRFYQ.js → chunk-L5PQPAU6.js} +2 -2
  25. package/dist/{chunk-DUPHBKVV.js → chunk-LHRHB5EJ.js} +2 -2
  26. package/dist/{chunk-5GMY4TTF.js → chunk-OEPYLZXK.js} +2 -2
  27. package/dist/chunk-SVBV2VEK.js +181 -0
  28. package/dist/chunk-SVBV2VEK.js.map +7 -0
  29. package/dist/{chunk-XYVPLV6Z.js → chunk-TTAFUUHZ.js} +3 -3
  30. package/dist/{chunk-2DLFHAGW.js → chunk-UK2KWJIQ.js} +12 -9
  31. package/dist/{chunk-2DLFHAGW.js.map → chunk-UK2KWJIQ.js.map} +3 -3
  32. package/dist/{chunk-K2OH56BH.js → chunk-UVREOAMH.js} +3 -3
  33. package/dist/{chunk-LQ5Q35IF.js → chunk-WYGBGCRO.js} +7 -5
  34. package/dist/chunk-WYGBGCRO.js.map +7 -0
  35. package/dist/{chunk-FDHIL2CV.js → chunk-X6J3VVYC.js} +9 -6
  36. package/dist/{chunk-FDHIL2CV.js.map → chunk-X6J3VVYC.js.map} +2 -2
  37. package/dist/{chunk-PXNHL3SH.js → chunk-YRTA3G6O.js} +11 -4
  38. package/dist/chunk-YRTA3G6O.js.map +7 -0
  39. package/dist/{chunk-35OVUYPI.js → chunk-YSKUXQ2N.js} +3 -3
  40. package/dist/connected-evidence.js +51 -26
  41. package/dist/dataset-workspaces.js +1136 -34
  42. package/dist/dataset-workspaces.js.map +4 -4
  43. package/dist/experiment-evaluation-schedules.js +18 -18
  44. package/dist/experiment-improvements.js +7 -7
  45. package/dist/experiments.js +19 -17
  46. package/dist/index.js +60 -35
  47. package/dist/index.js.map +1 -1
  48. package/dist/model-starter-attempts.js +1 -1
  49. package/dist/model-starter-catalog.js +9 -9
  50. package/dist/model-starters.js +9 -9
  51. package/dist/model-taskset-runs.js +2 -2
  52. package/dist/post-training.js +5 -5
  53. package/dist/taskset-drafts.js +117 -72
  54. package/dist/taskset-drafts.js.map +4 -4
  55. package/dist/taskset-packages.js +15 -15
  56. package/dist/training-bundle.js +17 -13
  57. package/dist/training-bundle.js.map +2 -2
  58. package/dist/training.js +7 -7
  59. package/dist/types/packages/sdk/src/advanced-refiner-evaluations.d.ts +3 -3
  60. package/dist/types/packages/sdk/src/candidate-evaluation-client.d.ts +24 -3
  61. package/dist/types/packages/sdk/src/candidate-evaluation-client.d.ts.map +1 -1
  62. package/dist/types/packages/sdk/src/candidate-evaluations.d.ts +26 -2
  63. package/dist/types/packages/sdk/src/candidate-evaluations.d.ts.map +1 -1
  64. package/dist/types/packages/sdk/src/codex-experiment-runtime.d.ts +17 -0
  65. package/dist/types/packages/sdk/src/codex-experiment-runtime.d.ts.map +1 -0
  66. package/dist/types/packages/sdk/src/connected-dataset-source.d.ts +1 -0
  67. package/dist/types/packages/sdk/src/connected-dataset-source.d.ts.map +1 -1
  68. package/dist/types/packages/sdk/src/connected-evidence-client.d.ts +80 -9
  69. package/dist/types/packages/sdk/src/connected-evidence-client.d.ts.map +1 -1
  70. package/dist/types/packages/sdk/src/connected-evidence-contracts.d.ts +3 -2
  71. package/dist/types/packages/sdk/src/connected-evidence-contracts.d.ts.map +1 -1
  72. package/dist/types/packages/sdk/src/connected-evidence.d.ts +3 -0
  73. package/dist/types/packages/sdk/src/connected-evidence.d.ts.map +1 -1
  74. package/dist/types/packages/sdk/src/connected-starting-assets.d.ts +98 -0
  75. package/dist/types/packages/sdk/src/connected-starting-assets.d.ts.map +1 -0
  76. package/dist/types/packages/sdk/src/connected-sync.d.ts +138 -8
  77. package/dist/types/packages/sdk/src/connected-sync.d.ts.map +1 -1
  78. package/dist/types/packages/sdk/src/dataset-preparation-assembly.d.ts +11 -0
  79. package/dist/types/packages/sdk/src/dataset-preparation-assembly.d.ts.map +1 -0
  80. package/dist/types/packages/sdk/src/dataset-preparation-authoring-contracts.d.ts +1357 -0
  81. package/dist/types/packages/sdk/src/dataset-preparation-authoring-contracts.d.ts.map +1 -0
  82. package/dist/types/packages/sdk/src/dataset-preparation-client.d.ts +831 -0
  83. package/dist/types/packages/sdk/src/dataset-preparation-client.d.ts.map +1 -0
  84. package/dist/types/packages/sdk/src/dataset-preparation-contracts.d.ts +860 -0
  85. package/dist/types/packages/sdk/src/dataset-preparation-contracts.d.ts.map +1 -0
  86. package/dist/types/packages/sdk/src/dataset-preparation-qualification-contracts.d.ts +89 -0
  87. package/dist/types/packages/sdk/src/dataset-preparation-qualification-contracts.d.ts.map +1 -0
  88. package/dist/types/packages/sdk/src/dataset-preparation-research-contracts.d.ts +203 -0
  89. package/dist/types/packages/sdk/src/dataset-preparation-research-contracts.d.ts.map +1 -0
  90. package/dist/types/packages/sdk/src/dataset-preparation-starting-state.d.ts +76 -0
  91. package/dist/types/packages/sdk/src/dataset-preparation-starting-state.d.ts.map +1 -0
  92. package/dist/types/packages/sdk/src/dataset-preparation-workspace.d.ts +630 -0
  93. package/dist/types/packages/sdk/src/dataset-preparation-workspace.d.ts.map +1 -0
  94. package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts +58 -14
  95. package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts.map +1 -1
  96. package/dist/types/packages/sdk/src/dataset-workspace-contracts.d.ts +12 -0
  97. package/dist/types/packages/sdk/src/dataset-workspace-contracts.d.ts.map +1 -1
  98. package/dist/types/packages/sdk/src/dataset-workspace-operations.d.ts +12 -0
  99. package/dist/types/packages/sdk/src/dataset-workspace-operations.d.ts.map +1 -1
  100. package/dist/types/packages/sdk/src/dataset-workspaces.d.ts +7 -0
  101. package/dist/types/packages/sdk/src/dataset-workspaces.d.ts.map +1 -1
  102. package/dist/types/packages/sdk/src/experiment-client.d.ts +88 -11
  103. package/dist/types/packages/sdk/src/experiment-client.d.ts.map +1 -1
  104. package/dist/types/packages/sdk/src/experiment-contracts.d.ts +40 -4
  105. package/dist/types/packages/sdk/src/experiment-contracts.d.ts.map +1 -1
  106. package/dist/types/packages/sdk/src/experiment-evaluation-schedules.d.ts +71 -7
  107. package/dist/types/packages/sdk/src/experiment-evaluation-schedules.d.ts.map +1 -1
  108. package/dist/types/packages/sdk/src/experiment-run-contracts.d.ts +13 -1
  109. package/dist/types/packages/sdk/src/experiment-run-contracts.d.ts.map +1 -1
  110. package/dist/types/packages/sdk/src/experiment-run-details.d.ts +60 -5
  111. package/dist/types/packages/sdk/src/experiment-run-details.d.ts.map +1 -1
  112. package/dist/types/packages/sdk/src/experiments.d.ts +1 -0
  113. package/dist/types/packages/sdk/src/experiments.d.ts.map +1 -1
  114. package/dist/types/packages/sdk/src/harness-experiment-policy.d.ts +1 -1
  115. package/dist/types/packages/sdk/src/learning-batch-assets.d.ts +1 -0
  116. package/dist/types/packages/sdk/src/learning-batch-assets.d.ts.map +1 -1
  117. package/dist/types/packages/sdk/src/model-batch-review-contracts.d.ts +5 -0
  118. package/dist/types/packages/sdk/src/model-batch-review-contracts.d.ts.map +1 -1
  119. package/dist/types/packages/sdk/src/model-batch-review-preparation.d.ts +1 -0
  120. package/dist/types/packages/sdk/src/model-batch-review-preparation.d.ts.map +1 -1
  121. package/dist/types/packages/sdk/src/model-batch-review.d.ts +7 -4
  122. package/dist/types/packages/sdk/src/model-batch-review.d.ts.map +1 -1
  123. package/dist/types/packages/sdk/src/model-starter-attempts.d.ts +102 -4
  124. package/dist/types/packages/sdk/src/model-starter-attempts.d.ts.map +1 -1
  125. package/dist/types/packages/sdk/src/model-starter-catalog.d.ts +9 -0
  126. package/dist/types/packages/sdk/src/model-starter-catalog.d.ts.map +1 -1
  127. package/dist/types/packages/sdk/src/model-starter-execution.d.ts +4 -0
  128. package/dist/types/packages/sdk/src/model-starter-execution.d.ts.map +1 -1
  129. package/dist/types/packages/sdk/src/model-starters.d.ts +18 -0
  130. package/dist/types/packages/sdk/src/model-starters.d.ts.map +1 -1
  131. package/dist/types/packages/sdk/src/model-taskset-derivation.d.ts +13 -0
  132. package/dist/types/packages/sdk/src/model-taskset-derivation.d.ts.map +1 -1
  133. package/dist/types/packages/sdk/src/model-taskset-resources.d.ts +4 -0
  134. package/dist/types/packages/sdk/src/model-taskset-resources.d.ts.map +1 -1
  135. package/dist/types/packages/sdk/src/model-taskset-runs-contracts.d.ts +52 -4
  136. package/dist/types/packages/sdk/src/model-taskset-runs-contracts.d.ts.map +1 -1
  137. package/dist/types/packages/sdk/src/model-taskset-runs.d.ts +32 -4
  138. package/dist/types/packages/sdk/src/model-taskset-runs.d.ts.map +1 -1
  139. package/dist/types/packages/sdk/src/post-training.d.ts +60 -5
  140. package/dist/types/packages/sdk/src/post-training.d.ts.map +1 -1
  141. package/dist/types/packages/sdk/src/profile-external-dataset-package.d.ts +19 -4
  142. package/dist/types/packages/sdk/src/profile-external-dataset-package.d.ts.map +1 -1
  143. package/dist/types/packages/sdk/src/task-design-contracts.d.ts +367 -0
  144. package/dist/types/packages/sdk/src/task-design-contracts.d.ts.map +1 -0
  145. package/dist/types/packages/sdk/src/taskset-authored-contracts.d.ts +6 -0
  146. package/dist/types/packages/sdk/src/taskset-authored-contracts.d.ts.map +1 -1
  147. package/dist/types/packages/sdk/src/taskset-authored-files.d.ts +9 -3
  148. package/dist/types/packages/sdk/src/taskset-authored-files.d.ts.map +1 -1
  149. package/dist/types/packages/sdk/src/taskset-authored-portable-release.d.ts.map +1 -1
  150. package/dist/types/packages/sdk/src/taskset-calibration-fixtures.d.ts +5 -0
  151. package/dist/types/packages/sdk/src/taskset-calibration-fixtures.d.ts.map +1 -1
  152. package/dist/types/packages/sdk/src/taskset-draft-api-contracts.d.ts +12 -0
  153. package/dist/types/packages/sdk/src/taskset-draft-api-contracts.d.ts.map +1 -1
  154. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts +48 -12
  155. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts.map +1 -1
  156. package/dist/types/packages/sdk/src/taskset-draft-core.d.ts +11 -0
  157. package/dist/types/packages/sdk/src/taskset-draft-core.d.ts.map +1 -1
  158. package/dist/types/packages/sdk/src/taskset-draft-document.d.ts +7 -0
  159. package/dist/types/packages/sdk/src/taskset-draft-document.d.ts.map +1 -1
  160. package/dist/types/packages/sdk/src/taskset-draft-files.d.ts.map +1 -1
  161. package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts +38 -8
  162. package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts.map +1 -1
  163. package/dist/types/packages/sdk/src/taskset-draft-source.d.ts +14 -2
  164. package/dist/types/packages/sdk/src/taskset-draft-source.d.ts.map +1 -1
  165. package/dist/types/packages/sdk/src/taskset-draft-workspace.d.ts +12 -0
  166. package/dist/types/packages/sdk/src/taskset-draft-workspace.d.ts.map +1 -1
  167. package/dist/types/packages/sdk/src/taskset-drafts.d.ts +2 -0
  168. package/dist/types/packages/sdk/src/taskset-drafts.d.ts.map +1 -1
  169. package/dist/types/packages/sdk/src/taskset-package-client.d.ts +68 -0
  170. package/dist/types/packages/sdk/src/taskset-package-client.d.ts.map +1 -1
  171. package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts +35 -0
  172. package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts.map +1 -1
  173. package/dist/types/packages/sdk/src/taskset-package-files.d.ts.map +1 -1
  174. package/dist/types/packages/sdk/src/taskset-package-grader-projection.d.ts +5 -1
  175. package/dist/types/packages/sdk/src/taskset-package-grader-projection.d.ts.map +1 -1
  176. package/dist/types/packages/sdk/src/taskset-package-learning.d.ts +10 -4
  177. package/dist/types/packages/sdk/src/taskset-package-learning.d.ts.map +1 -1
  178. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts +34 -12
  179. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts.map +1 -1
  180. package/dist/types/packages/sdk/src/training-bundle.d.ts.map +1 -1
  181. package/dist/types/packages/sdk/src/training-learning-batch.d.ts +26 -6
  182. package/dist/types/packages/sdk/src/training-learning-batch.d.ts.map +1 -1
  183. package/dist/types/packages/sdk/src/training.d.ts +8 -1
  184. package/dist/types/packages/sdk/src/training.d.ts.map +1 -1
  185. package/package.json +3 -3
  186. package/dist/chunk-4IWDOYKR.js +0 -65
  187. package/dist/chunk-4IWDOYKR.js.map +0 -7
  188. package/dist/chunk-DUJXF7YI.js.map +0 -7
  189. package/dist/chunk-LQ5Q35IF.js.map +0 -7
  190. package/dist/chunk-P3BRSSRD.js.map +0 -7
  191. package/dist/chunk-PXNHL3SH.js.map +0 -7
  192. package/dist/chunk-Z4OLAEPL.js.map +0 -7
  193. /package/dist/{chunk-2G4WBMYI.js.map → chunk-32GJS7FV.js.map} +0 -0
  194. /package/dist/{chunk-YGLTO26A.js.map → chunk-7L4NIEW2.js.map} +0 -0
  195. /package/dist/{chunk-VEU3IXAQ.js.map → chunk-7MISLCN2.js.map} +0 -0
  196. /package/dist/{chunk-WTHJ3H4M.js.map → chunk-7WUJBFCH.js.map} +0 -0
  197. /package/dist/{chunk-PHETIB6R.js.map → chunk-AV5JV26B.js.map} +0 -0
  198. /package/dist/{chunk-Z4JJS6KE.js.map → chunk-B7VYE7YQ.js.map} +0 -0
  199. /package/dist/{chunk-AQGFJLIV.js.map → chunk-BDDT6VN6.js.map} +0 -0
  200. /package/dist/{chunk-PMBBNQ2J.js.map → chunk-D4WTE6ZA.js.map} +0 -0
  201. /package/dist/{chunk-ZOXHSJWU.js.map → chunk-DBRRQASP.js.map} +0 -0
  202. /package/dist/{chunk-FZH2M4G6.js.map → chunk-DG5CRENU.js.map} +0 -0
  203. /package/dist/{chunk-HAOPRFYQ.js.map → chunk-L5PQPAU6.js.map} +0 -0
  204. /package/dist/{chunk-DUPHBKVV.js.map → chunk-LHRHB5EJ.js.map} +0 -0
  205. /package/dist/{chunk-5GMY4TTF.js.map → chunk-OEPYLZXK.js.map} +0 -0
  206. /package/dist/{chunk-XYVPLV6Z.js.map → chunk-TTAFUUHZ.js.map} +0 -0
  207. /package/dist/{chunk-K2OH56BH.js.map → chunk-UVREOAMH.js.map} +0 -0
  208. /package/dist/{chunk-35OVUYPI.js.map → chunk-YSKUXQ2N.js.map} +0 -0
@@ -1,4 +1,9 @@
1
1
  import {
2
+ TaskDesignProposalSchema
3
+ } from "./chunk-FZYLRL7H.js";
4
+ import {
5
+ ConnectedCaseRefSchema,
6
+ ConnectedStartingAssetSchema,
2
7
  DatasetWorkspaceBeginVersionSchema,
3
8
  DatasetWorkspaceListQuerySchema,
4
9
  DatasetWorkspaceListSchema,
@@ -7,30 +12,41 @@ import {
7
12
  DatasetWorkspaceValidationSchema,
8
13
  DatasetWorkspaceVersionsSchema,
9
14
  DatasetWorkspaceWriteSchema
10
- } from "./chunk-4IWDOYKR.js";
15
+ } from "./chunk-SVBV2VEK.js";
11
16
  import {
12
17
  compileTasksetDraftWorkspace
13
- } from "./chunk-AQGFJLIV.js";
18
+ } from "./chunk-BDDT6VN6.js";
14
19
  import {
20
+ TasksetDraftSchema,
21
+ createTasksetDraft,
22
+ createTasksetDraftFile,
23
+ createTasksetDraftWorkspace,
24
+ decodeTasksetDraftFileContent,
25
+ decodeTasksetDraftWorkspaceFile,
15
26
  validateTasksetDraftWorkspace
16
- } from "./chunk-LQ5Q35IF.js";
27
+ } from "./chunk-WYGBGCRO.js";
17
28
  import {
18
29
  TasksetCatalogReleaseRefSchema
19
30
  } from "./chunk-K3JCP4FO.js";
20
- import "./chunk-PXNHL3SH.js";
21
- import "./chunk-FDHIL2CV.js";
22
- import "./chunk-Z4OLAEPL.js";
31
+ import "./chunk-YRTA3G6O.js";
32
+ import "./chunk-X6J3VVYC.js";
33
+ import {
34
+ TaskDataRecordSchema,
35
+ TaskRequiredOutputSchema,
36
+ TasksetEnvironmentContractSchema,
37
+ TasksetSourceRefSchema
38
+ } from "./chunk-644E3NM2.js";
23
39
  import "./chunk-2U54EOXJ.js";
24
- import "./chunk-XYVPLV6Z.js";
25
- import "./chunk-5GMY4TTF.js";
26
- import "./chunk-35OVUYPI.js";
27
- import "./chunk-JOKRT4CK.js";
40
+ import "./chunk-TTAFUUHZ.js";
41
+ import "./chunk-OEPYLZXK.js";
42
+ import "./chunk-YSKUXQ2N.js";
43
+ import "./chunk-KV6JXPQH.js";
28
44
  import "./chunk-KAE7AMYE.js";
29
45
  import {
30
46
  ExperimentGraderPinSchema
31
- } from "./chunk-HAOPRFYQ.js";
32
- import "./chunk-WTHJ3H4M.js";
33
- import "./chunk-DUJXF7YI.js";
47
+ } from "./chunk-L5PQPAU6.js";
48
+ import "./chunk-7WUJBFCH.js";
49
+ import "./chunk-CK3ONRRC.js";
34
50
  import "./chunk-TCHAWJMB.js";
35
51
  import "./chunk-3KXDH6OB.js";
36
52
  import {
@@ -48,6 +64,678 @@ var DatasetWorkspaceOperationResultSchema = z.object({ operationId: z.string().t
48
64
  if (kind !== actualKind) context.addIssue({ code: "custom", message: "Operation recovery kind differs from its retained lifecycle." });
49
65
  });
50
66
 
67
+ // src/dataset-preparation-client.ts
68
+ import { z as z3 } from "zod";
69
+
70
+ // src/dataset-preparation-contracts.ts
71
+ import { z as z2 } from "zod";
72
+ var Id = z2.string().trim().min(1).max(240);
73
+ var Hash = z2.string().regex(/^[a-f0-9]{64}$/);
74
+ var Timestamp = z2.iso.datetime();
75
+ var Count = z2.number().int().nonnegative();
76
+ var MicroUsd = z2.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER);
77
+ var DatasetPreparationGrantCreateSchema = z2.object({
78
+ id: Id,
79
+ projectId: Id,
80
+ maximumMicroUsd: MicroUsd.positive(),
81
+ maximumSandboxSeconds: Count.max(10800)
82
+ }).strict();
83
+ var DatasetPreparationGrantSchema = z2.object({
84
+ schemaVersion: z2.literal("openpond.datasetPreparationGrant.v1"),
85
+ id: Id,
86
+ teamId: Id,
87
+ ownerUserId: Id,
88
+ projectId: Id,
89
+ maximumMicroUsd: MicroUsd,
90
+ maximumSandboxSeconds: Count,
91
+ settledMicroUsd: MicroUsd,
92
+ heldMicroUsd: MicroUsd,
93
+ sandboxSeconds: Count,
94
+ heldSandboxSeconds: Count,
95
+ unresolvedCalls: Count,
96
+ cleanupPending: Count,
97
+ createdAt: Timestamp,
98
+ updatedAt: Timestamp
99
+ }).strict();
100
+ var DatasetPreparationTaskClassSchema = z2.enum([
101
+ "coding_change",
102
+ "debugging",
103
+ "code_explanation",
104
+ "structured_text",
105
+ "artifact_work"
106
+ ]);
107
+ var DatasetPreparationStageSchema = z2.enum([
108
+ "inventory",
109
+ "preview",
110
+ "reconstruction",
111
+ "grader_authoring",
112
+ "qualification",
113
+ "release"
114
+ ]);
115
+ var DatasetPreparationStatusSchema = z2.enum([
116
+ "draft",
117
+ "running",
118
+ "pausing",
119
+ "paused",
120
+ "needs_attention",
121
+ "preview_ready",
122
+ "ready",
123
+ "releasing",
124
+ "completed",
125
+ "insufficient_data",
126
+ "budget_exhausted",
127
+ "cancelling",
128
+ "cancelled",
129
+ "failed"
130
+ ]);
131
+ var DatasetPreparationSourceSchema = z2.object({
132
+ projectId: Id,
133
+ from: Timestamp,
134
+ to: Timestamp,
135
+ importCutoff: Timestamp,
136
+ connections: z2.array(Id).min(1).max(50)
137
+ }).strict().superRefine((value, ctx) => {
138
+ if (Date.parse(value.from) >= Date.parse(value.to))
139
+ ctx.addIssue({
140
+ code: "custom",
141
+ message: "Source event-time window must be nonempty."
142
+ });
143
+ if (new Set(value.connections).size !== value.connections.length)
144
+ ctx.addIssue({
145
+ code: "custom",
146
+ message: "Source connections must be unique."
147
+ });
148
+ });
149
+ var DatasetPreparationPolicySchema = z2.object({
150
+ source: DatasetPreparationSourceSchema,
151
+ taskClasses: z2.array(DatasetPreparationTaskClassSchema).min(1).max(5),
152
+ limits: z2.object({
153
+ maximumConversations: z2.number().int().min(1).max(1e4),
154
+ maximumCandidates: z2.number().int().min(1).max(1e4),
155
+ acceptedTarget: z2.number().int().min(1).max(1e4),
156
+ maximumRepairsPerCandidate: z2.number().int().min(0).max(5),
157
+ maximumEvidenceBytesPerConversation: z2.number().int().min(1024).max(2e6)
158
+ }).strict(),
159
+ researcher: z2.object({
160
+ modelId: Id,
161
+ maximumOutputTokens: z2.number().int().min(1).max(32768)
162
+ }).strict(),
163
+ adjudicator: z2.object({ modelId: Id, maximumOutputTokens: z2.number().int().min(1).max(32768) }).strict(),
164
+ grading: z2.discriminatedUnion("mode", [
165
+ z2.object({ mode: z2.literal("auto") }).strict(),
166
+ z2.object({ mode: z2.literal("existing_only") }).strict(),
167
+ z2.object({
168
+ mode: z2.literal("manual"),
169
+ releases: z2.array(TasksetCatalogReleaseRefSchema).min(1).max(100)
170
+ }).strict()
171
+ ]),
172
+ budget: z2.object({
173
+ grantId: Id,
174
+ maximumMicroUsd: MicroUsd.positive(),
175
+ previewMaximumMicroUsd: MicroUsd,
176
+ qualificationMaximumMicroUsdPerCandidate: MicroUsd,
177
+ maximumSandboxSeconds: Count.max(10800)
178
+ }).strict(),
179
+ finish: z2.enum(["stop_ready", "create_private_version"]),
180
+ execution: z2.enum(["preview_only", "prepare"]),
181
+ allowPartialVersion: z2.boolean(),
182
+ // Pilot-inspected material is development data. Protected study preparation
183
+ // uses a separate authorization and cannot inherit this inspection policy.
184
+ population: z2.literal("development")
185
+ }).strict().superRefine((value, ctx) => {
186
+ if (value.limits.acceptedTarget > value.limits.maximumCandidates)
187
+ ctx.addIssue({
188
+ code: "custom",
189
+ message: "Accepted target exceeds candidate scan limit."
190
+ });
191
+ if (value.budget.previewMaximumMicroUsd > value.budget.maximumMicroUsd)
192
+ ctx.addIssue({
193
+ code: "custom",
194
+ message: "Preview allowance exceeds the shared preparation ceiling."
195
+ });
196
+ if (new Set(value.taskClasses).size !== value.taskClasses.length)
197
+ ctx.addIssue({ code: "custom", message: "Task classes must be unique." });
198
+ });
199
+ var DatasetPreparationCreateSchema = z2.object({
200
+ operationId: Id,
201
+ expectedDatasetRevision: z2.number().int().positive(),
202
+ policy: DatasetPreparationPolicySchema
203
+ }).strict();
204
+ var DatasetPreparationCommandSchema = z2.discriminatedUnion("action", [
205
+ z2.object({
206
+ action: z2.enum(["start", "pause", "resume", "cancel", "release"]),
207
+ operationId: Id,
208
+ expectedRevision: z2.number().int().positive()
209
+ }).strict(),
210
+ z2.object({
211
+ action: z2.literal("resolve"),
212
+ operationId: Id,
213
+ expectedRevision: z2.number().int().positive(),
214
+ candidateId: Id,
215
+ decision: z2.enum(["retry", "exclude"]),
216
+ reason: z2.string().trim().min(1).max(5e3)
217
+ }).strict()
218
+ ]);
219
+ var DatasetPreparationCoverageSchema = z2.object({
220
+ conversations: Count,
221
+ importedTurns: Count,
222
+ selectedTurns: Count,
223
+ queuedSnapshots: Count.nullable(),
224
+ failedSessions: Count.nullable(),
225
+ skippedSessions: Count.nullable(),
226
+ lastAdmissionAt: Timestamp.nullable(),
227
+ complete: z2.boolean(),
228
+ reasons: z2.array(
229
+ z2.object({ code: Id, message: z2.string().trim().min(1).max(2e3) }).strict()
230
+ ).max(100),
231
+ sourceInventoryHash: Hash
232
+ }).strict();
233
+ var DatasetPreparationAccountingSchema = z2.object({
234
+ maximumMicroUsd: MicroUsd,
235
+ settledMicroUsd: MicroUsd,
236
+ heldMicroUsd: MicroUsd,
237
+ unresolvedCalls: Count,
238
+ sandboxSeconds: Count,
239
+ cleanupPending: Count,
240
+ complete: z2.boolean()
241
+ }).strict();
242
+ var DatasetPreparationPreviewSchema = z2.object({
243
+ sampleConversations: Count,
244
+ sampleTurns: Count,
245
+ candidateCount: Count,
246
+ modelId: Id,
247
+ modelConfigurationHash: Hash,
248
+ callReceiptIds: z2.array(Id).max(2e3),
249
+ inputTokens: Count.nullable(),
250
+ outputTokens: Count.nullable(),
251
+ classes: z2.array(
252
+ z2.object({
253
+ taskClass: DatasetPreparationTaskClassSchema,
254
+ candidates: Count,
255
+ assessment: z2.enum([
256
+ "executable",
257
+ "calibrated_judge",
258
+ "unsupported"
259
+ ]),
260
+ requirements: z2.array(z2.string().trim().min(1).max(5e3)).max(20)
261
+ }).strict()
262
+ ).max(5),
263
+ exclusions: z2.array(
264
+ z2.object({
265
+ code: Id,
266
+ count: Count,
267
+ reason: z2.string().trim().min(1).max(5e3)
268
+ }).strict()
269
+ ).max(100),
270
+ estimates: z2.array(
271
+ z2.object({
272
+ stage: DatasetPreparationStageSchema,
273
+ minimumMicroUsd: MicroUsd,
274
+ maximumMicroUsd: MicroUsd,
275
+ assumptions: z2.array(z2.string().trim().min(1).max(2e3)).min(1).max(20)
276
+ }).strict().refine(
277
+ (value) => value.minimumMicroUsd <= value.maximumMicroUsd,
278
+ "Estimate range is reversed."
279
+ )
280
+ ).max(6),
281
+ createdAt: Timestamp
282
+ }).strict();
283
+ var DatasetPreparationRunSchema = z2.object({
284
+ schemaVersion: z2.literal("openpond.datasetPreparationRun.v1"),
285
+ id: Id,
286
+ operationId: Id,
287
+ teamId: Id,
288
+ ownerUserId: Id,
289
+ datasetId: Id,
290
+ datasetRevision: z2.number().int().positive(),
291
+ revision: z2.number().int().positive(),
292
+ requestHash: Hash,
293
+ policy: DatasetPreparationPolicySchema,
294
+ status: DatasetPreparationStatusSchema,
295
+ stage: DatasetPreparationStageSchema,
296
+ coverage: DatasetPreparationCoverageSchema.nullable(),
297
+ preview: DatasetPreparationPreviewSchema.nullable(),
298
+ counts: z2.object({
299
+ scannedConversations: Count,
300
+ scannedTurns: Count,
301
+ candidates: Count,
302
+ reconstructed: Count,
303
+ qualifying: Count,
304
+ qualified: Count,
305
+ excluded: Count,
306
+ needsAttention: Count
307
+ }).strict(),
308
+ accounting: DatasetPreparationAccountingSchema,
309
+ publication: z2.object({
310
+ datasetId: Id,
311
+ workspaceRevision: z2.number().int().positive(),
312
+ release: TasksetCatalogReleaseRefSchema
313
+ }).strict().nullable(),
314
+ error: z2.object({ code: Id, message: z2.string().trim().min(1).max(5e3) }).strict().nullable(),
315
+ createdAt: Timestamp,
316
+ updatedAt: Timestamp
317
+ }).strict().superRefine((value, ctx) => {
318
+ if (value.accounting.maximumMicroUsd !== value.policy.budget.maximumMicroUsd)
319
+ ctx.addIssue({
320
+ code: "custom",
321
+ message: "Accounting authority differs from the saved preparation policy."
322
+ });
323
+ if (value.counts.qualified + value.counts.excluded + value.counts.needsAttention > value.counts.candidates)
324
+ ctx.addIssue({
325
+ code: "custom",
326
+ message: "Preparation outcomes exceed the candidate population."
327
+ });
328
+ if (value.status === "preview_ready" && (value.policy.execution !== "preview_only" || value.stage !== "preview" || !value.preview || !value.coverage?.complete || !value.accounting.complete)) ctx.addIssue({ code: "custom", message: "Preview readiness requires a preview-only policy, reconciled source coverage and settled preview calls." });
329
+ if (["ready", "releasing", "completed"].includes(value.status) && (value.counts.qualified === 0 || !value.policy.allowPartialVersion && value.counts.qualified < value.policy.limits.acceptedTarget))
330
+ ctx.addIssue({
331
+ code: "custom",
332
+ message: "Preparation cannot report readiness below its accepted target."
333
+ });
334
+ if (["ready", "releasing", "completed"].includes(value.status) && (value.policy.execution !== "prepare" || !value.preview || !value.coverage?.complete || !value.accounting.complete))
335
+ ctx.addIssue({ code: "custom", message: "Dataset readiness requires full preparation authority, reconciled source coverage, preview and final accounting." });
336
+ if (value.status === "completed" && (!value.publication || !value.accounting.complete))
337
+ ctx.addIssue({
338
+ code: "custom",
339
+ message: "Completed preparation requires publication and reconciled accounting."
340
+ });
341
+ if (value.status === "cancelled" && (!value.accounting.complete || value.accounting.cleanupPending > 0))
342
+ ctx.addIssue({
343
+ code: "custom",
344
+ message: "Cancellation requires settled resource obligations."
345
+ });
346
+ });
347
+ var DatasetPreparationListSchema = z2.object({
348
+ teamId: Id,
349
+ datasetId: Id,
350
+ runs: z2.array(DatasetPreparationRunSchema).max(50),
351
+ nextCursor: Id.nullable()
352
+ }).strict();
353
+ var PreparedTaskEvidenceSpanSchema = z2.object({
354
+ source: ConnectedCaseRefSchema,
355
+ startSequence: Count,
356
+ endSequence: Count,
357
+ role: z2.enum([
358
+ "requirement",
359
+ "initial_context",
360
+ "outcome",
361
+ "correction",
362
+ "verification"
363
+ ])
364
+ }).strict().superRefine((value, ctx) => {
365
+ if (value.endSequence < value.startSequence)
366
+ ctx.addIssue({
367
+ code: "custom",
368
+ message: "Evidence span must be ordered."
369
+ });
370
+ });
371
+ var PreparedTaskProvenanceSchema = z2.object({
372
+ schemaVersion: z2.literal("openpond.preparedTaskProvenance.v1"),
373
+ candidateId: Id,
374
+ preparationId: Id,
375
+ familyKey: Id,
376
+ sourceSpans: z2.array(PreparedTaskEvidenceSpanSchema).min(1).max(200),
377
+ firstAvailableAt: Timestamp,
378
+ initialInputHash: Hash,
379
+ initialEnvironmentHash: Hash,
380
+ initialAssetsHash: Hash.nullable(),
381
+ sourceScopeHash: Hash
382
+ }).strict().superRefine((value, ctx) => {
383
+ if (!value.sourceSpans.some((span) => span.role === "requirement"))
384
+ ctx.addIssue({
385
+ code: "custom",
386
+ message: "A reconstructed task needs a source requirement."
387
+ });
388
+ const seen = /* @__PURE__ */ new Set();
389
+ for (const span of value.sourceSpans) {
390
+ if (value.sourceSpans.some((other) => other !== span && other.source.id === span.source.id && other.source.snapshotHash === span.source.snapshotHash && other.role !== span.role && span.startSequence <= other.endSequence && other.startSequence <= span.endSequence))
391
+ ctx.addIssue({ code: "custom", message: "Evidence offsets cannot have conflicting roles." });
392
+ const key = JSON.stringify([
393
+ span.source,
394
+ span.startSequence,
395
+ span.endSequence
396
+ ]);
397
+ if (seen.has(key))
398
+ ctx.addIssue({
399
+ code: "custom",
400
+ message: "Evidence span is duplicated or crosses public/private roles."
401
+ });
402
+ seen.add(key);
403
+ }
404
+ });
405
+ var PreparedTaskQualificationSchema = z2.object({
406
+ schemaVersion: z2.literal("openpond.preparedTaskQualification.v1"),
407
+ id: Id,
408
+ candidateId: Id,
409
+ preparationId: Id,
410
+ taskHash: Hash,
411
+ environmentHash: Hash,
412
+ packageHash: Hash,
413
+ graderBindings: z2.array(
414
+ z2.object({
415
+ id: Id,
416
+ version: Id,
417
+ contentHash: Hash,
418
+ origin: z2.enum(["reused", "adapted", "authored"])
419
+ }).strict()
420
+ ).min(1).max(100),
421
+ checks: z2.array(
422
+ z2.object({
423
+ id: Id,
424
+ label: z2.enum([
425
+ "positive",
426
+ "incorrect",
427
+ "incomplete",
428
+ "adversarial",
429
+ "clean_reset"
430
+ ]),
431
+ executionReceiptId: Id,
432
+ expectedPassed: z2.boolean(),
433
+ observedPassed: z2.boolean().nullable(),
434
+ infrastructureError: Id.nullable()
435
+ }).strict()
436
+ ).min(5).max(500),
437
+ independentEvidenceRefs: z2.array(Id).min(1).max(100),
438
+ judgeCalibration: z2.enum(["not_applicable", "passed", "failed", "pending"]),
439
+ cleanup: z2.enum(["completed", "pending"]),
440
+ passed: z2.boolean(),
441
+ createdAt: Timestamp
442
+ }).strict().superRefine((value, ctx) => {
443
+ if (!value.passed) return;
444
+ const labels = new Set(value.checks.map((check) => check.label));
445
+ if ([
446
+ "positive",
447
+ "incorrect",
448
+ "incomplete",
449
+ "adversarial",
450
+ "clean_reset"
451
+ ].some(
452
+ (label) => !labels.has(label)
453
+ ))
454
+ ctx.addIssue({
455
+ code: "custom",
456
+ message: "Qualified tasks require positive, negative, adversarial and clean-reset evidence."
457
+ });
458
+ if (value.cleanup !== "completed" || ["pending", "failed"].includes(value.judgeCalibration) || value.checks.some(
459
+ (check) => check.infrastructureError !== null || check.observedPassed !== check.expectedPassed
460
+ ))
461
+ ctx.addIssue({
462
+ code: "custom",
463
+ message: "Failed, uncalibrated or uncleared checks cannot qualify a task."
464
+ });
465
+ if (value.checks.some(
466
+ (check) => check.expectedPassed !== ["positive", "clean_reset"].includes(check.label)
467
+ ))
468
+ ctx.addIssue({
469
+ code: "custom",
470
+ message: "Qualification witnesses must pass positives/resets and reject incorrect, incomplete and adversarial outputs."
471
+ });
472
+ });
473
+ var DatasetPreparationCandidateSchema = z2.object({
474
+ id: Id,
475
+ runId: Id,
476
+ revision: z2.number().int().positive(),
477
+ taskClass: DatasetPreparationTaskClassSchema,
478
+ status: z2.enum([
479
+ "discovered",
480
+ "reconstructing",
481
+ "authoring",
482
+ "qualifying",
483
+ "qualified",
484
+ "excluded",
485
+ "needs_attention"
486
+ ]),
487
+ objective: z2.string().trim().min(1).max(2e4),
488
+ provenance: PreparedTaskProvenanceSchema.nullable(),
489
+ qualification: PreparedTaskQualificationSchema.nullable(),
490
+ reason: z2.object({ code: Id, message: z2.string().trim().min(1).max(5e3) }).strict().nullable(),
491
+ attempts: Count.max(6)
492
+ }).strict().superRefine((value, ctx) => {
493
+ if (value.status === "qualified" && (!value.provenance || !value.qualification?.passed))
494
+ ctx.addIssue({
495
+ code: "custom",
496
+ message: "Candidate admission requires reconstruction and qualification receipts."
497
+ });
498
+ if (value.provenance && (value.provenance.candidateId !== value.id || value.provenance.preparationId !== value.runId))
499
+ ctx.addIssue({
500
+ code: "custom",
501
+ message: "Candidate provenance identity mismatch."
502
+ });
503
+ if (value.qualification && (value.qualification.candidateId !== value.id || value.qualification.preparationId !== value.runId))
504
+ ctx.addIssue({
505
+ code: "custom",
506
+ message: "Candidate qualification identity mismatch."
507
+ });
508
+ });
509
+
510
+ // src/dataset-preparation-client.ts
511
+ var Id2 = z3.string().trim().min(1).max(240);
512
+ var CandidatePage = z3.object({
513
+ teamId: Id2,
514
+ datasetId: Id2,
515
+ runId: Id2,
516
+ candidates: z3.array(DatasetPreparationCandidateSchema).max(50),
517
+ nextCursor: Id2.nullable()
518
+ }).strict();
519
+ var DatasetPreparationRequestError = class extends Error {
520
+ constructor(status, code, message) {
521
+ super(message);
522
+ this.status = status;
523
+ this.code = code;
524
+ this.name = "DatasetPreparationRequestError";
525
+ }
526
+ status;
527
+ code;
528
+ };
529
+ var OpenPondDatasetPreparationClient = class {
530
+ constructor(options) {
531
+ this.options = options;
532
+ const url = new URL(options.baseUrl);
533
+ if (!["http:", "https:"].includes(url.protocol) || url.username || url.password || url.search || url.hash || !options.apiKey.trim() || !options.teamId.trim())
534
+ throw new Error(
535
+ "A clean API origin and workspace credentials are required."
536
+ );
537
+ this.baseUrl = url.toString().replace(/\/+$/, "");
538
+ }
539
+ options;
540
+ baseUrl;
541
+ async create(datasetId, input, signal) {
542
+ const request = DatasetPreparationCreateSchema.parse(input);
543
+ const result = this.readRun(
544
+ await this.request(datasetId, "", "POST", request, signal),
545
+ datasetId
546
+ );
547
+ if (result.operationId !== request.operationId || result.requestHash !== contentHash(request) || result.datasetRevision !== request.expectedDatasetRevision)
548
+ throw new Error(
549
+ "Preparation creation receipt differs from the saved intent."
550
+ );
551
+ return result;
552
+ }
553
+ async createGrant(datasetId, input, signal) {
554
+ const request = DatasetPreparationGrantCreateSchema.parse(input);
555
+ const grant = this.readGrant(
556
+ await this.request(datasetId, "/grants", "POST", request, signal)
557
+ );
558
+ if (grant.id !== request.id || grant.projectId !== request.projectId || grant.maximumMicroUsd !== request.maximumMicroUsd || grant.maximumSandboxSeconds !== request.maximumSandboxSeconds)
559
+ throw new Error(
560
+ "Preparation grant receipt differs from the saved limits."
561
+ );
562
+ return grant;
563
+ }
564
+ async getGrant(datasetId, grantId, signal) {
565
+ const grant = this.readGrant(
566
+ await this.request(
567
+ datasetId,
568
+ `/grants/${encodeURIComponent(Id2.parse(grantId))}`,
569
+ "GET",
570
+ void 0,
571
+ signal
572
+ )
573
+ );
574
+ if (grant.id !== grantId)
575
+ throw new Error("Preparation grant identity mismatch.");
576
+ return grant;
577
+ }
578
+ readGrant(value) {
579
+ const grant = DatasetPreparationGrantSchema.parse(value);
580
+ if (grant.teamId !== this.options.teamId)
581
+ throw new Error("Preparation grant workspace mismatch.");
582
+ return grant;
583
+ }
584
+ async get(datasetId, runId, signal) {
585
+ return this.readRun(
586
+ await this.request(
587
+ datasetId,
588
+ `/${encodeURIComponent(Id2.parse(runId))}`,
589
+ "GET",
590
+ void 0,
591
+ signal
592
+ ),
593
+ datasetId,
594
+ runId
595
+ );
596
+ }
597
+ async list(datasetId, options = {}) {
598
+ const query = new URLSearchParams(
599
+ options.cursor ? { cursor: Id2.parse(options.cursor) } : {}
600
+ );
601
+ const result = DatasetPreparationListSchema.parse(
602
+ await this.request(
603
+ datasetId,
604
+ `?${query}`,
605
+ "GET",
606
+ void 0,
607
+ options.signal
608
+ )
609
+ );
610
+ if (result.teamId !== this.options.teamId || result.datasetId !== datasetId || result.runs.some(
611
+ (run) => run.teamId !== result.teamId || run.datasetId !== datasetId
612
+ ) || new Set(result.runs.map((run) => run.id)).size !== result.runs.length)
613
+ throw new Error("Preparation list scope/identity mismatch.");
614
+ return result;
615
+ }
616
+ async command(datasetId, runId, input, signal) {
617
+ const request = DatasetPreparationCommandSchema.parse(input);
618
+ const result = this.readRun(
619
+ await this.request(
620
+ datasetId,
621
+ `/${encodeURIComponent(Id2.parse(runId))}/commands`,
622
+ "POST",
623
+ request,
624
+ signal
625
+ ),
626
+ datasetId,
627
+ runId
628
+ );
629
+ if (result.revision < request.expectedRevision + 1)
630
+ throw new Error(
631
+ "Preparation command did not advance the expected revision."
632
+ );
633
+ return result;
634
+ }
635
+ async operationResult(datasetId, operationId, signal) {
636
+ const result = await this.request(
637
+ datasetId,
638
+ `/operations/${encodeURIComponent(Id2.parse(operationId))}`,
639
+ "GET",
640
+ void 0,
641
+ signal
642
+ );
643
+ if (result === null) return null;
644
+ const receipt = z3.object({
645
+ operationId: Id2,
646
+ requestHash: z3.string().regex(/^[a-f0-9]{64}$/),
647
+ run: DatasetPreparationRunSchema
648
+ }).strict().parse(result);
649
+ if (receipt.operationId !== operationId)
650
+ throw new Error("Preparation operation recovery identity mismatch.");
651
+ this.readRun(receipt.run, datasetId);
652
+ return receipt;
653
+ }
654
+ async candidates(datasetId, runId, options = {}) {
655
+ const query = new URLSearchParams(
656
+ options.cursor ? { cursor: Id2.parse(options.cursor) } : {}
657
+ );
658
+ const result = CandidatePage.parse(
659
+ await this.request(
660
+ datasetId,
661
+ `/${encodeURIComponent(Id2.parse(runId))}/candidates?${query}`,
662
+ "GET",
663
+ void 0,
664
+ options.signal
665
+ )
666
+ );
667
+ if (result.teamId !== this.options.teamId || result.datasetId !== datasetId || result.runId !== runId || result.candidates.some((candidate) => candidate.runId !== runId) || new Set(result.candidates.map((candidate) => candidate.id)).size !== result.candidates.length)
668
+ throw new Error("Preparation candidate page scope/identity mismatch.");
669
+ return result;
670
+ }
671
+ readRun(value, datasetId, runId) {
672
+ const result = DatasetPreparationRunSchema.parse(value);
673
+ if (result.teamId !== this.options.teamId || result.datasetId !== datasetId || runId && result.id !== runId)
674
+ throw new Error("Preparation run scope/identity mismatch.");
675
+ return result;
676
+ }
677
+ async request(datasetId, path, method, body, signal) {
678
+ const response = await (this.options.fetch ?? fetch)(
679
+ `${this.baseUrl}/v1/dataset-workspaces/${encodeURIComponent(Id2.parse(datasetId))}/preparations${path}`,
680
+ {
681
+ method,
682
+ signal,
683
+ redirect: "error",
684
+ headers: {
685
+ Authorization: `Bearer ${this.options.apiKey}`,
686
+ "X-OpenPond-Team-Id": this.options.teamId,
687
+ "Content-Type": "application/json"
688
+ },
689
+ ...body === void 0 ? {} : { body: JSON.stringify(body) }
690
+ }
691
+ );
692
+ if (!response.body) {
693
+ if (!response.ok)
694
+ throw new DatasetPreparationRequestError(
695
+ response.status,
696
+ "dataset_preparation_request_failed",
697
+ `Dataset preparation request failed (${response.status}).`
698
+ );
699
+ throw new Error("Preparation response is empty.");
700
+ }
701
+ const reader = response.body.getReader(), chunks = [];
702
+ let length = 0;
703
+ try {
704
+ while (true) {
705
+ const part = await reader.read();
706
+ if (part.done) break;
707
+ length += part.value.byteLength;
708
+ if (length > (response.ok ? 8 * 1024 * 1024 : 64 * 1024))
709
+ throw new Error("Preparation response exceeds its bounded page.");
710
+ chunks.push(part.value);
711
+ }
712
+ } finally {
713
+ await reader.cancel();
714
+ }
715
+ const bytes = new Uint8Array(length);
716
+ let offset = 0;
717
+ for (const chunk of chunks) {
718
+ bytes.set(chunk, offset);
719
+ offset += chunk.length;
720
+ }
721
+ const raw = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
722
+ if (!response.ok) {
723
+ let value = null;
724
+ try {
725
+ value = JSON.parse(raw);
726
+ } catch {
727
+ }
728
+ const error = z3.object({ code: z3.string().max(240), message: z3.string().max(5e3) }).safeParse(value);
729
+ throw new DatasetPreparationRequestError(
730
+ response.status,
731
+ error.success ? error.data.code : "dataset_preparation_request_failed",
732
+ error.success ? error.data.message : `Dataset preparation request failed (${response.status}).`
733
+ );
734
+ }
735
+ return JSON.parse(raw);
736
+ }
737
+ };
738
+
51
739
  // src/dataset-workspace-client.ts
52
740
  var OpenPondDatasetWorkspaceClient = class {
53
741
  constructor(options) {
@@ -55,9 +743,11 @@ var OpenPondDatasetWorkspaceClient = class {
55
743
  const url = new URL(options.baseUrl);
56
744
  if (!["http:", "https:"].includes(url.protocol) || url.username || url.password || url.search || url.hash || !options.apiKey.trim() || !options.teamId.trim()) throw new Error("A clean API origin and workspace credentials are required.");
57
745
  this.baseUrl = url.toString().replace(/\/+$/, "");
746
+ this.preparations = new OpenPondDatasetPreparationClient(options);
58
747
  }
59
748
  options;
60
749
  baseUrl;
750
+ preparations;
61
751
  async list(options = {}) {
62
752
  const { signal, ...input } = options;
63
753
  const query = DatasetWorkspaceListQuerySchema.parse(input);
@@ -164,33 +854,33 @@ var OpenPondDatasetWorkspaceClient = class {
164
854
 
165
855
  // src/dataset-population.ts
166
856
  import { TaskSplitSchema, TaskRecordSchema } from "@openpond/evals/tasksets";
167
- import { z as z2 } from "zod";
168
- var Id = z2.string().trim().min(1).max(500);
169
- var Hash = z2.string().regex(/^[a-f0-9]{64}$/);
170
- var DatasetPopulationQuerySchema = z2.object({
857
+ import { z as z4 } from "zod";
858
+ var Id3 = z4.string().trim().min(1).max(500);
859
+ var Hash2 = z4.string().regex(/^[a-f0-9]{64}$/);
860
+ var DatasetPopulationQuerySchema = z4.object({
171
861
  release: TasksetCatalogReleaseRefSchema,
172
- afterId: Id.optional(),
173
- limit: z2.number().int().min(1).max(1e4).default(100),
174
- view: z2.enum(["ids", "policy"]).default("ids")
862
+ afterId: Id3.optional(),
863
+ limit: z4.number().int().min(1).max(1e4).default(100),
864
+ view: z4.enum(["ids", "policy"]).default("ids")
175
865
  }).strict().superRefine((query, context) => {
176
866
  if (query.view === "policy" && query.limit > 100) context.addIssue({ code: "custom", path: ["limit"], message: "Policy previews are bounded to 100 tasks." });
177
867
  });
178
- var TaskIdentity = z2.object({ id: TaskRecordSchema.shape.id, split: TaskSplitSchema }).strict();
868
+ var TaskIdentity = z4.object({ id: TaskRecordSchema.shape.id, split: TaskSplitSchema }).strict();
179
869
  var PolicyTask = TaskIdentity.extend({
180
- input: z2.record(z2.string(), z2.unknown()),
181
- policyVisibleContext: z2.record(z2.string(), z2.unknown()),
182
- artifacts: z2.array(z2.object({ id: Id, path: z2.string(), mediaType: z2.string(), sizeBytes: z2.number().int().nonnegative() }).strict()).max(1e3)
870
+ input: z4.record(z4.string(), z4.unknown()),
871
+ policyVisibleContext: z4.record(z4.string(), z4.unknown()),
872
+ artifacts: z4.array(z4.object({ id: Id3, path: z4.string(), mediaType: z4.string(), sizeBytes: z4.number().int().nonnegative() }).strict()).max(1e3)
183
873
  }).strict();
184
- var DatasetPopulationPageSchema = z2.object({
185
- schemaVersion: z2.literal("openpond.datasetPopulationPage.v1"),
186
- teamId: Id,
874
+ var DatasetPopulationPageSchema = z4.object({
875
+ schemaVersion: z4.literal("openpond.datasetPopulationPage.v1"),
876
+ teamId: Id3,
187
877
  release: TasksetCatalogReleaseRefSchema,
188
878
  view: DatasetPopulationQuerySchema.shape.view,
189
- taskCount: z2.number().int().nonnegative(),
190
- items: z2.array(z2.union([TaskIdentity, PolicyTask])).max(1e4),
191
- graders: z2.array(ExperimentGraderPinSchema).max(1e3),
192
- nextCursor: Id.nullable(),
193
- contentHash: Hash
879
+ taskCount: z4.number().int().nonnegative(),
880
+ items: z4.array(z4.union([TaskIdentity, PolicyTask])).max(1e4),
881
+ graders: z4.array(ExperimentGraderPinSchema).max(1e3),
882
+ nextCursor: Id3.nullable(),
883
+ contentHash: Hash2
194
884
  }).strict().superRefine((page, context) => {
195
885
  if (page.view === "policy" && page.items.length > 100) context.addIssue({ code: "custom", message: "Policy preview exceeded its task bound." });
196
886
  if (page.items.some((item) => "input" in item !== (page.view === "policy"))) context.addIssue({ code: "custom", message: "Dataset task view differs from the requested projection." });
@@ -227,16 +917,414 @@ var OpenPondDatasetPopulationClient = class {
227
917
  reader.releaseLock();
228
918
  }
229
919
  const raw = JSON.parse(source);
230
- if (!response.ok) throw new Error(z2.object({ message: z2.string() }).passthrough().parse(raw).message);
920
+ if (!response.ok) throw new Error(z4.object({ message: z4.string() }).passthrough().parse(raw).message);
231
921
  const page = DatasetPopulationPageSchema.parse(raw);
232
922
  const { contentHash: hash, ...content } = page;
233
923
  if (page.teamId !== this.options.teamId || contentHash(page.release) !== contentHash(query.release) || page.view !== query.view || page.items.length > query.limit || contentHash(content) !== hash || page.items.some((item, index) => query.afterId !== void 0 && item.id <= query.afterId || index > 0 && item.id <= page.items[index - 1].id) || page.nextCursor !== null && page.nextCursor !== page.items.at(-1)?.id) throw new Error("Dataset population identity, hash, order or bounds mismatch.");
234
924
  return page;
235
925
  }
236
926
  };
927
+
928
+ // src/dataset-preparation-research-contracts.ts
929
+ import { z as z5 } from "zod";
930
+ var Id4 = z5.string().trim().min(1).max(240);
931
+ var Text = z5.string().trim().min(1).max(5e3);
932
+ var DatasetPreparationResearchCandidateSchema = z5.object({
933
+ taskClass: DatasetPreparationTaskClassSchema,
934
+ objective: z5.string().trim().min(1).max(2e4),
935
+ sourceSpans: z5.array(PreparedTaskEvidenceSpanSchema).min(1).max(200),
936
+ firstAvailableAt: z5.iso.datetime(),
937
+ reconstruction: z5.object({
938
+ kind: z5.enum(["text_only", "pinned_repository", "pinned_artifact", "unsupported"]),
939
+ requiredAssets: z5.array(z5.object({ reference: Text, evidence: PreparedTaskEvidenceSpanSchema }).strict()).max(100),
940
+ missingEvidence: z5.array(Text).max(20)
941
+ }).strict(),
942
+ assessment: z5.object({
943
+ kind: z5.enum(["executable", "calibrated_judge", "unsupported"]),
944
+ requirements: z5.array(z5.object({ criterion: Text, evidence: PreparedTaskEvidenceSpanSchema }).strict()).min(1).max(20),
945
+ limitations: z5.array(Text).max(20)
946
+ }).strict()
947
+ }).strict().superRefine((value, ctx) => {
948
+ if (!value.sourceSpans.some((span) => span.role === "requirement"))
949
+ ctx.addIssue({ code: "custom", message: "A research candidate requires independently retained user requirements." });
950
+ if (value.assessment.requirements.some((item) => item.evidence.role !== "requirement"))
951
+ ctx.addIssue({ code: "custom", message: "Assessment criteria must cite user requirements, not historical answers." });
952
+ });
953
+ var DatasetPreparationResearchDecisionSchema = z5.object({
954
+ schemaVersion: z5.literal("openpond.datasetPreparationResearchDecision.v1"),
955
+ sourceId: Id4,
956
+ snapshotHash: z5.string().regex(/^[a-f0-9]{64}$/),
957
+ candidates: z5.array(DatasetPreparationResearchCandidateSchema).max(100),
958
+ exclusions: z5.array(z5.object({ code: Id4, reason: Text, sourceSpans: z5.array(PreparedTaskEvidenceSpanSchema).max(200) }).strict()).max(100),
959
+ contextSummary: z5.string().max(2e4)
960
+ }).strict();
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
+
1019
+ // src/dataset-preparation-workspace.ts
1020
+ function createPreparedTaskAuthoringWorkspace(input) {
1021
+ const provenance = PreparedTaskProvenanceSchema.parse(input.provenance);
1022
+ const proposal = TaskDesignProposalSchema.parse(input.proposal);
1023
+ let sources = input.sources.map((source) => TasksetSourceRefSchema.parse(source));
1024
+ const environment = TasksetDraftSchema.shape.environment.parse(input.initialEnvironment);
1025
+ const startingFiles = input.startingFiles ?? [];
1026
+ let workAssets;
1027
+ let retainedFiles = startingFiles;
1028
+ if (contentHash(input.initialInput) !== provenance.initialInputHash || contentHash(environment) !== provenance.initialEnvironmentHash)
1029
+ throw new Error("Prepared Taskset input or starting environment differs from its reconstruction.");
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)
1060
+ throw new Error("Text preparation cannot silently add tools, state or starting assets.");
1061
+ const sourceIds = new Set(sources.map((source) => source.id));
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)))
1063
+ throw new Error("Prepared Taskset authoring must retain exactly one reconstructed task and its authorized evidence.");
1064
+ if (!/^[a-f0-9]{64}$/.test(input.skillHash) || !input.modelId.trim() || !Number.isSafeInteger(input.attempt) || input.attempt < 1 || input.attempt > 6)
1065
+ throw new Error("Prepared Taskset authoring provenance is invalid.");
1066
+ if (!proposal.proposedGraders.length || new Set(proposal.proposedGraders.map((grader) => grader.id)).size !== proposal.proposedGraders.length)
1067
+ throw new Error("Prepared Taskset needs distinct outcome graders.");
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.");
1070
+ if (proposal.graderFixtures.some((fixture) => fixture.taskIndex !== 0 || fixture.metadata.substituteExpectedOutput === true))
1071
+ throw new Error("Prepared fixtures cannot refer to another task or substitute a historical answer.");
1072
+ const draft = createTasksetDraft({
1073
+ profileId: input.teamId,
1074
+ id: `${provenance.candidateId}-attempt-${input.attempt}-draft`,
1075
+ name: proposal.name,
1076
+ now: input.createdAt
1077
+ });
1078
+ draft.objective = proposal.objective;
1079
+ draft.sourceRefs = sources;
1080
+ draft.environment = environment;
1081
+ draft.graders = proposal.proposedGraders.map((grader) => ({
1082
+ ...grader,
1083
+ taskIds: [provenance.candidateId],
1084
+ privileged: true,
1085
+ ...grader.kind === "model_judge" ? { rewardEligible: false, calibrationStatus: "pending" } : {},
1086
+ metadata: { ...grader.metadata, preparedRewardEligible: grader.rewardEligible, preparedTask: provenance.candidateId, authoringSkillHash: input.skillHash }
1087
+ }));
1088
+ draft.policy = {
1089
+ policyVisibleFields: environment.kind === "work" ? ["input", "requiredOutputs"] : ["input"],
1090
+ privilegedFields: ["expectedOutput"],
1091
+ hiddenGraderRefs: draft.graders.map((grader) => grader.id),
1092
+ connectedAppScopes: []
1093
+ };
1094
+ draft.tasks = [TaskDataRecordSchema.parse({
1095
+ schemaVersion: "openpond.taskData.v1",
1096
+ id: provenance.candidateId,
1097
+ clusterKey: provenance.familyKey,
1098
+ split: "validation",
1099
+ input: input.initialInput,
1100
+ expectedOutput: null,
1101
+ policyVisibleContext: {},
1102
+ privilegedContextRef: null,
1103
+ sourceRefs: [...sourceIds],
1104
+ ...environment.kind === "work" ? {
1105
+ assets: workAssets,
1106
+ requiredOutputs: TaskRequiredOutputSchema.array().min(1).max(100).parse(environment.metadata.requiredOutputs)
1107
+ } : {},
1108
+ tags: ["prepared-task", "development-exposed"],
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
+ }
1131
+ })];
1132
+ draft.graderFixtures = proposal.graderFixtures.map(({ taskIndex: _index, ...fixture }) => ({
1133
+ ...fixture,
1134
+ taskId: provenance.candidateId,
1135
+ metadata: { ...fixture.metadata, witnessOrigin: "authoring_proposal", independentlyQualified: false }
1136
+ }));
1137
+ draft.metadata = { datasetPreparation: {
1138
+ schemaVersion: "openpond.datasetPreparationAuthoring.v1",
1139
+ provenance,
1140
+ modelId: input.modelId,
1141
+ skillHash: input.skillHash,
1142
+ proposalHash: contentHash(proposal),
1143
+ attempt: input.attempt,
1144
+ qualification: "pending",
1145
+ exposure: "development"
1146
+ } };
1147
+ return createTasksetDraftWorkspace({
1148
+ schemaVersion: "openpond.tasksetDraftWorkspace.v1",
1149
+ draft,
1150
+ files: [...retainedFiles, ...proposal.generatedFiles.map((generated) => {
1151
+ const file = createTasksetDraftFile(generated.path, new TextEncoder().encode(generated.content));
1152
+ return {
1153
+ path: file.path,
1154
+ contentHash: file.contentHash,
1155
+ sizeBytes: file.sizeBytes,
1156
+ base64: Buffer.from(decodeTasksetDraftFileContent(file.content)).toString("base64")
1157
+ };
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
+ }
1305
+ });
1306
+ }
237
1307
  export {
238
1308
  DatasetPopulationPageSchema,
239
1309
  DatasetPopulationQuerySchema,
1310
+ DatasetPreparationAccountingSchema,
1311
+ DatasetPreparationCandidateSchema,
1312
+ DatasetPreparationCommandSchema,
1313
+ DatasetPreparationCoverageSchema,
1314
+ DatasetPreparationCreateSchema,
1315
+ DatasetPreparationGrantCreateSchema,
1316
+ DatasetPreparationGrantSchema,
1317
+ DatasetPreparationListSchema,
1318
+ DatasetPreparationPolicySchema,
1319
+ DatasetPreparationPreviewSchema,
1320
+ DatasetPreparationRequestError,
1321
+ DatasetPreparationResearchCandidateSchema,
1322
+ DatasetPreparationResearchDecisionSchema,
1323
+ DatasetPreparationRunSchema,
1324
+ DatasetPreparationSourceSchema,
1325
+ DatasetPreparationStageSchema,
1326
+ DatasetPreparationStatusSchema,
1327
+ DatasetPreparationTaskClassSchema,
240
1328
  DatasetWorkspaceBeginVersionSchema,
241
1329
  DatasetWorkspaceListQuerySchema,
242
1330
  DatasetWorkspaceListSchema,
@@ -248,7 +1336,21 @@ export {
248
1336
  DatasetWorkspaceVersionsSchema,
249
1337
  DatasetWorkspaceWriteSchema,
250
1338
  OpenPondDatasetPopulationClient,
1339
+ OpenPondDatasetPreparationClient,
251
1340
  OpenPondDatasetWorkspaceClient,
252
- compileTasksetDraftWorkspace
1341
+ PreparedCheckerAuditSchema,
1342
+ PreparedQualificationPlanSchema,
1343
+ PreparedQualificationWitnessSchema,
1344
+ PreparedRepositoryStartingStateSchema,
1345
+ PreparedTaskEvidenceSpanSchema,
1346
+ PreparedTaskProvenanceSchema,
1347
+ PreparedTaskQualificationSchema,
1348
+ PreparedWitnessAdjudicationSchema,
1349
+ assemblePreparedTaskWorkspaces,
1350
+ compileTasksetDraftWorkspace,
1351
+ connectedStartingAssetReference,
1352
+ createPreparedTaskAuthoringWorkspace,
1353
+ parseConnectedStartingAssetReference,
1354
+ preparedRepositoryEnvironment
253
1355
  };
254
1356
  //# sourceMappingURL=dataset-workspaces.js.map