openpond-sdk 0.12.1 → 0.12.3

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 (107) hide show
  1. package/LEARNING.md +16 -0
  2. package/dist/advanced-refiner-evaluations.js +5 -5
  3. package/dist/candidate-evaluations.js +4 -4
  4. package/dist/{chunk-VSRTJDVB.js → chunk-36WJTS5V.js} +3 -3
  5. package/dist/{chunk-O5ARJVT5.js → chunk-77N3QEIL.js} +2 -2
  6. package/dist/{chunk-WNH4DOEC.js → chunk-BFR3VC25.js} +16 -285
  7. package/dist/chunk-BFR3VC25.js.map +7 -0
  8. package/dist/{chunk-DBRRQASP.js → chunk-BSK3VLM3.js} +2 -2
  9. package/dist/{chunk-B7VYE7YQ.js → chunk-CTVKI3BV.js} +2 -2
  10. package/dist/{chunk-7AZDNZP6.js → chunk-CWXM57QR.js} +350 -87
  11. package/dist/chunk-CWXM57QR.js.map +7 -0
  12. package/dist/chunk-FY7NHCEH.js +255 -0
  13. package/dist/chunk-FY7NHCEH.js.map +7 -0
  14. package/dist/{chunk-YSKUXQ2N.js → chunk-G53MA5XX.js} +3 -3
  15. package/dist/{chunk-AV5JV26B.js → chunk-G6Y6CQYV.js} +2 -2
  16. package/dist/{chunk-ENLQCKY6.js → chunk-K5WRVSOL.js} +5 -5
  17. package/dist/{chunk-OEPYLZXK.js → chunk-MLPPSCDQ.js} +2 -2
  18. package/dist/{chunk-7GYXC2AI.js → chunk-QEIT5VXJ.js} +2 -2
  19. package/dist/{chunk-L5PQPAU6.js → chunk-QTJQIHDZ.js} +5 -2
  20. package/dist/{chunk-L5PQPAU6.js.map → chunk-QTJQIHDZ.js.map} +2 -2
  21. package/dist/{chunk-YVFERCUC.js → chunk-TMUAKJWX.js} +71 -2
  22. package/dist/chunk-TMUAKJWX.js.map +7 -0
  23. package/dist/{chunk-D4WTE6ZA.js → chunk-TSMGMA6R.js} +2 -2
  24. package/dist/{chunk-VOL3WES2.js → chunk-UPS52OPZ.js} +10 -165
  25. package/dist/chunk-UPS52OPZ.js.map +7 -0
  26. package/dist/{chunk-MLFKQ7E7.js → chunk-VY5AFE7A.js} +2 -2
  27. package/dist/{chunk-WVISXXIL.js → chunk-XYQD4LDI.js} +2 -2
  28. package/dist/{chunk-DG5CRENU.js → chunk-YUKV7RCD.js} +2 -2
  29. package/dist/{chunk-7WUJBFCH.js → chunk-ZJ3H3VS7.js} +18 -1
  30. package/dist/chunk-ZJ3H3VS7.js.map +7 -0
  31. package/dist/connected-evidence.js +10 -10
  32. package/dist/dataset-workspaces.js +51 -14
  33. package/dist/dataset-workspaces.js.map +3 -3
  34. package/dist/experiment-evaluation-schedules.js +13 -13
  35. package/dist/experiment-improvements.js +5 -5
  36. package/dist/experiments.js +17 -13
  37. package/dist/index.js +19 -19
  38. package/dist/model-starter-catalog.js +5 -5
  39. package/dist/model-starters.js +5 -5
  40. package/dist/model-taskset-runs.js +1 -1
  41. package/dist/post-training.js +4 -4
  42. package/dist/taskset-drafts.js +16 -16
  43. package/dist/taskset-packages.js +14 -14
  44. package/dist/training-bundle.js +161 -25
  45. package/dist/training-bundle.js.map +4 -4
  46. package/dist/training.js +11 -5
  47. package/dist/types/packages/sdk/src/candidate-evaluation-client.d.ts +9 -0
  48. package/dist/types/packages/sdk/src/candidate-evaluation-client.d.ts.map +1 -1
  49. package/dist/types/packages/sdk/src/candidate-evaluations.d.ts +6 -0
  50. package/dist/types/packages/sdk/src/candidate-evaluations.d.ts.map +1 -1
  51. package/dist/types/packages/sdk/src/dataset-preparation-client.d.ts +45 -0
  52. package/dist/types/packages/sdk/src/dataset-preparation-client.d.ts.map +1 -1
  53. package/dist/types/packages/sdk/src/dataset-preparation-contracts.d.ts +56 -0
  54. package/dist/types/packages/sdk/src/dataset-preparation-contracts.d.ts.map +1 -1
  55. package/dist/types/packages/sdk/src/dataset-preparation-source-coverage.d.ts +31 -0
  56. package/dist/types/packages/sdk/src/dataset-preparation-source-coverage.d.ts.map +1 -0
  57. package/dist/types/packages/sdk/src/dataset-workspaces.d.ts +1 -0
  58. package/dist/types/packages/sdk/src/dataset-workspaces.d.ts.map +1 -1
  59. package/dist/types/packages/sdk/src/experiment-client.d.ts +33 -0
  60. package/dist/types/packages/sdk/src/experiment-client.d.ts.map +1 -1
  61. package/dist/types/packages/sdk/src/experiment-contracts.d.ts +12 -0
  62. package/dist/types/packages/sdk/src/experiment-contracts.d.ts.map +1 -1
  63. package/dist/types/packages/sdk/src/experiment-evaluation-schedules.d.ts +21 -0
  64. package/dist/types/packages/sdk/src/experiment-evaluation-schedules.d.ts.map +1 -1
  65. package/dist/types/packages/sdk/src/experiment-run-contracts.d.ts +3 -0
  66. package/dist/types/packages/sdk/src/experiment-run-contracts.d.ts.map +1 -1
  67. package/dist/types/packages/sdk/src/experiment-run-details.d.ts +15 -0
  68. package/dist/types/packages/sdk/src/experiment-run-details.d.ts.map +1 -1
  69. package/dist/types/packages/sdk/src/harness-experiment-policy.d.ts +17 -0
  70. package/dist/types/packages/sdk/src/harness-experiment-policy.d.ts.map +1 -1
  71. package/dist/types/packages/sdk/src/managed-training-preparation.d.ts +3 -1
  72. package/dist/types/packages/sdk/src/managed-training-preparation.d.ts.map +1 -1
  73. package/dist/types/packages/sdk/src/model-taskset-runs-contracts.d.ts +12 -0
  74. package/dist/types/packages/sdk/src/model-taskset-runs-contracts.d.ts.map +1 -1
  75. package/dist/types/packages/sdk/src/model-taskset-runs.d.ts +12 -0
  76. package/dist/types/packages/sdk/src/model-taskset-runs.d.ts.map +1 -1
  77. package/dist/types/packages/sdk/src/post-training.d.ts +15 -0
  78. package/dist/types/packages/sdk/src/post-training.d.ts.map +1 -1
  79. package/dist/types/packages/sdk/src/training-bundle-contracts.d.ts +4 -0
  80. package/dist/types/packages/sdk/src/training-bundle-contracts.d.ts.map +1 -1
  81. package/dist/types/packages/sdk/src/training-bundle.d.ts +4 -0
  82. package/dist/types/packages/sdk/src/training-bundle.d.ts.map +1 -1
  83. package/dist/types/packages/sdk/src/training-qualification-preparation.d.ts +364 -0
  84. package/dist/types/packages/sdk/src/training-qualification-preparation.d.ts.map +1 -0
  85. package/dist/types/packages/sdk/src/training.d.ts +161 -0
  86. package/dist/types/packages/sdk/src/training.d.ts.map +1 -1
  87. package/package.json +1 -1
  88. package/dist/chunk-7AZDNZP6.js.map +0 -7
  89. package/dist/chunk-7WUJBFCH.js.map +0 -7
  90. package/dist/chunk-PGBFI5HC.js +0 -98
  91. package/dist/chunk-PGBFI5HC.js.map +0 -7
  92. package/dist/chunk-VOL3WES2.js.map +0 -7
  93. package/dist/chunk-WNH4DOEC.js.map +0 -7
  94. package/dist/chunk-YVFERCUC.js.map +0 -7
  95. /package/dist/{chunk-VSRTJDVB.js.map → chunk-36WJTS5V.js.map} +0 -0
  96. /package/dist/{chunk-O5ARJVT5.js.map → chunk-77N3QEIL.js.map} +0 -0
  97. /package/dist/{chunk-DBRRQASP.js.map → chunk-BSK3VLM3.js.map} +0 -0
  98. /package/dist/{chunk-B7VYE7YQ.js.map → chunk-CTVKI3BV.js.map} +0 -0
  99. /package/dist/{chunk-YSKUXQ2N.js.map → chunk-G53MA5XX.js.map} +0 -0
  100. /package/dist/{chunk-AV5JV26B.js.map → chunk-G6Y6CQYV.js.map} +0 -0
  101. /package/dist/{chunk-ENLQCKY6.js.map → chunk-K5WRVSOL.js.map} +0 -0
  102. /package/dist/{chunk-OEPYLZXK.js.map → chunk-MLPPSCDQ.js.map} +0 -0
  103. /package/dist/{chunk-7GYXC2AI.js.map → chunk-QEIT5VXJ.js.map} +0 -0
  104. /package/dist/{chunk-D4WTE6ZA.js.map → chunk-TSMGMA6R.js.map} +0 -0
  105. /package/dist/{chunk-MLFKQ7E7.js.map → chunk-VY5AFE7A.js.map} +0 -0
  106. /package/dist/{chunk-WVISXXIL.js.map → chunk-XYQD4LDI.js.map} +0 -0
  107. /package/dist/{chunk-DG5CRENU.js.map → chunk-YUKV7RCD.js.map} +0 -0
@@ -12,6 +12,9 @@ import {
12
12
  TasksetPurposeSchema,
13
13
  TasksetSourceRefSchema
14
14
  } from "./chunk-FHCSDXIA.js";
15
+ import {
16
+ ModelTasksetDraftPreparationSchema
17
+ } from "./chunk-2U54EOXJ.js";
15
18
  import {
16
19
  ChatModelRefSchema
17
20
  } from "./chunk-KAE7AMYE.js";
@@ -20,14 +23,149 @@ import {
20
23
  contentHash
21
24
  } from "./chunk-COPVBJPL.js";
22
25
 
23
- // src/taskset-authored-contracts.ts
26
+ // src/taskset-draft-document.ts
24
27
  import { z } from "zod";
25
28
  import { TasksetMetricPolicySchema } from "@openpond/evals/metrics";
26
29
  var IdSchema = z.string().trim().min(1).max(240);
27
30
  var TimestampSchema = z.string().trim().min(1);
28
31
  var HashSchema = z.string().trim().min(8).max(256);
32
+ var CodeIdentifierSchema = z.string().trim().regex(/^[A-Za-z_$][A-Za-z0-9_$]*$/);
29
33
  var MetadataSchema = z.record(z.string(), z.unknown()).default({});
30
- var NullableIdSchema = IdSchema.nullable();
34
+ function safeRelativeFilePath(value) {
35
+ const normalized = value.trim().replaceAll("\\", "/");
36
+ if (!normalized || normalized.startsWith("/") || normalized === "." || normalized === "..") {
37
+ return false;
38
+ }
39
+ return !normalized.split("/").some(
40
+ (segment) => !segment || segment === "." || segment === ".."
41
+ );
42
+ }
43
+ var TaskDataDraftSchema = TaskDataRecordSchema.extend({
44
+ sourceRefs: z.array(IdSchema).max(100).default([])
45
+ });
46
+ var TasksetDraftStatusSchema = z.enum([
47
+ "draft",
48
+ "validating",
49
+ "needs_review",
50
+ "published"
51
+ ]);
52
+ var TasksetDraftReviewPolicySchema = z.object({
53
+ enabled: z.boolean(),
54
+ candidateCount: z.number().int().min(2).max(4),
55
+ minimumSamples: z.number().int().min(1).max(1e4).default(100),
56
+ allowTies: z.boolean(),
57
+ allowRejectAll: z.boolean(),
58
+ rubric: z.string().trim().max(5e4),
59
+ criteria: z.array(z.object({
60
+ id: IdSchema,
61
+ label: z.string().trim().min(1).max(500),
62
+ description: z.string().trim().max(1e4),
63
+ weight: z.number().nonnegative().max(1e3)
64
+ })).max(100)
65
+ });
66
+ var TasksetDraftOutputContractSchema = z.object({
67
+ mode: z.enum(["text", "structured_json", "artifacts"]),
68
+ jsonSchema: z.record(z.string(), z.unknown()).nullable(),
69
+ renderer: z.object({
70
+ module: z.string().trim().min(1).max(1e3).refine(safeRelativeFilePath, "Renderer modules must use a safe relative path."),
71
+ exportName: CodeIdentifierSchema,
72
+ configRef: z.string().trim().min(1).max(1e3).refine(safeRelativeFilePath, "Renderer configuration must use a safe relative path.").nullable().default(null)
73
+ }).nullable()
74
+ }).superRefine((output, context) => {
75
+ if (output.mode === "structured_json" && !output.jsonSchema) {
76
+ context.addIssue({
77
+ code: "custom",
78
+ message: "Structured JSON output requires a JSON Schema.",
79
+ path: ["jsonSchema"]
80
+ });
81
+ }
82
+ if (output.mode === "text" && output.renderer) {
83
+ context.addIssue({
84
+ code: "custom",
85
+ message: "Text output cannot configure an artifact renderer.",
86
+ path: ["renderer"]
87
+ });
88
+ }
89
+ });
90
+ var TasksetDraftSchema = z.object({
91
+ schemaVersion: z.literal("openpond.tasksetDraft.v1"),
92
+ id: IdSchema,
93
+ revision: z.number().int().positive(),
94
+ profileId: IdSchema,
95
+ modelScope: z.object({
96
+ modelId: IdSchema,
97
+ expectedModelRevision: z.number().int().positive(),
98
+ source: ModelTasksetDraftPreparationSchema.optional()
99
+ }).strict().nullable().default(null),
100
+ name: z.string().trim().max(500),
101
+ objective: z.string().trim().max(2e4),
102
+ purpose: TasksetPurposeSchema.default("general"),
103
+ benchmark: TasksetBenchmarkBindingSchema.nullable().default(null),
104
+ preferenceComparison: TasksetPreferenceComparisonBindingSchema.nullable().default(null),
105
+ status: TasksetDraftStatusSchema,
106
+ sourceRefs: z.array(TasksetSourceRefSchema).max(1e5).default([]),
107
+ datasetArtifact: DatasetArtifactManifestSchema.nullable().optional(),
108
+ policy: TaskPolicyBoundarySchema,
109
+ environment: TasksetEnvironmentContractSchema,
110
+ output: TasksetDraftOutputContractSchema.default({
111
+ mode: "text",
112
+ jsonSchema: null,
113
+ renderer: null
114
+ }),
115
+ capabilities: TasksetCapabilityManifestSchema,
116
+ metrics: TasksetMetricPolicySchema,
117
+ review: TasksetDraftReviewPolicySchema,
118
+ tasks: z.array(TaskDataDraftSchema).max(1e6).default([]),
119
+ graders: z.array(GraderSpecSchema).max(1e3).default([]),
120
+ graderFixtures: z.array(GraderFixtureSchema).max(1e5).default([]),
121
+ learningSignals: LearningSignalInventorySchema,
122
+ publishedTasksetRef: z.object({
123
+ id: IdSchema,
124
+ revision: z.number().int().positive(),
125
+ contentHash: HashSchema
126
+ }).nullable(),
127
+ createdAt: TimestampSchema,
128
+ updatedAt: TimestampSchema,
129
+ metadata: MetadataSchema
130
+ }).superRefine((draft, context) => {
131
+ if (draft.purpose === "benchmark" && !draft.benchmark) {
132
+ context.addIssue({
133
+ code: "custom",
134
+ message: "Benchmark drafts require an immutable benchmark binding.",
135
+ path: ["benchmark"]
136
+ });
137
+ }
138
+ if (draft.purpose !== "benchmark" && draft.benchmark) {
139
+ context.addIssue({
140
+ code: "custom",
141
+ message: "Only benchmark drafts may carry a benchmark binding.",
142
+ path: ["benchmark"]
143
+ });
144
+ }
145
+ if (draft.datasetArtifact && draft.tasks.length > 0) {
146
+ context.addIssue({
147
+ code: "custom",
148
+ message: "Artifact-backed drafts may not duplicate canonical rows inline.",
149
+ path: ["tasks"]
150
+ });
151
+ }
152
+ if (draft.status === "published" && !draft.publishedTasksetRef) {
153
+ context.addIssue({
154
+ code: "custom",
155
+ message: "Published drafts require an immutable Taskset reference.",
156
+ path: ["publishedTasksetRef"]
157
+ });
158
+ }
159
+ });
160
+
161
+ // src/taskset-authored-contracts.ts
162
+ import { z as z2 } from "zod";
163
+ import { TasksetMetricPolicySchema as TasksetMetricPolicySchema2 } from "@openpond/evals/metrics";
164
+ var IdSchema2 = z2.string().trim().min(1).max(240);
165
+ var TimestampSchema2 = z2.string().trim().min(1);
166
+ var HashSchema2 = z2.string().trim().min(8).max(256);
167
+ var MetadataSchema2 = z2.record(z2.string(), z2.unknown()).default({});
168
+ var NullableIdSchema = IdSchema2.nullable();
31
169
  var TASKSET_WORK_TOOL_NAMES = [
32
170
  "work_capabilities",
33
171
  "work_environment",
@@ -42,7 +180,7 @@ var TASKSET_WORK_TOOL_NAMES = [
42
180
  "work_save_output",
43
181
  "work_stop"
44
182
  ];
45
- var TasksetStatusSchema = z.enum([
183
+ var TasksetStatusSchema = z2.enum([
46
184
  "draft",
47
185
  "awaiting_disclosure_approval",
48
186
  "awaiting_materialization_approval",
@@ -55,51 +193,51 @@ var TasksetStatusSchema = z.enum([
55
193
  "failed",
56
194
  "archived"
57
195
  ]);
58
- var DatasetBuildIntentSchema = z.enum([
196
+ var DatasetBuildIntentSchema = z2.enum([
59
197
  "demonstrations",
60
198
  "preferences",
61
199
  "verifiable_reward",
62
200
  "rubric",
63
201
  "discovery"
64
202
  ]);
65
- var DatasetEvidenceTextSchema = z.string().trim().max(1e5);
66
- var DatasetBuildSpecificationSchema = z.discriminatedUnion("kind", [
67
- z.object({
68
- kind: z.literal("demonstrations"),
203
+ var DatasetEvidenceTextSchema = z2.string().trim().max(1e5);
204
+ var DatasetBuildSpecificationSchema = z2.discriminatedUnion("kind", [
205
+ z2.object({
206
+ kind: z2.literal("demonstrations"),
69
207
  behavior: DatasetEvidenceTextSchema,
70
- examples: z.array(z.object({
71
- id: IdSchema,
208
+ examples: z2.array(z2.object({
209
+ id: IdSchema2,
72
210
  prompt: DatasetEvidenceTextSchema,
73
211
  response: DatasetEvidenceTextSchema
74
212
  })).max(1e3).default([])
75
213
  }),
76
- z.object({
77
- kind: z.literal("preferences"),
214
+ z2.object({
215
+ kind: z2.literal("preferences"),
78
216
  preference: DatasetEvidenceTextSchema,
79
- pairs: z.array(z.object({
80
- id: IdSchema,
217
+ pairs: z2.array(z2.object({
218
+ id: IdSchema2,
81
219
  prompt: DatasetEvidenceTextSchema,
82
220
  chosen: DatasetEvidenceTextSchema,
83
221
  rejected: DatasetEvidenceTextSchema,
84
222
  rationale: DatasetEvidenceTextSchema
85
223
  })).max(1e3).default([])
86
224
  }),
87
- z.object({
88
- kind: z.literal("verifiable_reward"),
225
+ z2.object({
226
+ kind: z2.literal("verifiable_reward"),
89
227
  task: DatasetEvidenceTextSchema,
90
- rules: z.array(z.object({
91
- id: IdSchema,
92
- points: z.number().finite(),
228
+ rules: z2.array(z2.object({
229
+ id: IdSchema2,
230
+ points: z2.number().finite(),
93
231
  condition: DatasetEvidenceTextSchema
94
232
  })).max(1e3).default([]),
95
- otherwisePoints: z.number().finite().default(0)
233
+ otherwisePoints: z2.number().finite().default(0)
96
234
  }),
97
- z.object({
98
- kind: z.literal("rubric"),
235
+ z2.object({
236
+ kind: z2.literal("rubric"),
99
237
  task: DatasetEvidenceTextSchema,
100
- criteria: z.array(z.object({
101
- id: IdSchema,
102
- label: z.string().trim().max(500),
238
+ criteria: z2.array(z2.object({
239
+ id: IdSchema2,
240
+ label: z2.string().trim().max(500),
103
241
  description: DatasetEvidenceTextSchema
104
242
  })).max(1e3).default([]),
105
243
  positiveExample: DatasetEvidenceTextSchema,
@@ -107,21 +245,21 @@ var DatasetBuildSpecificationSchema = z.discriminatedUnion("kind", [
107
245
  boundaryExample: DatasetEvidenceTextSchema
108
246
  })
109
247
  ]);
110
- var GeneratedTaskFileSchema = z.object({
111
- path: z.string().trim().min(1).max(1e3),
112
- role: z.enum(["environment", "verifier", "fixture"]),
113
- content: z.string().max(25e4)
248
+ var GeneratedTaskFileSchema = z2.object({
249
+ path: z2.string().trim().min(1).max(1e3),
250
+ role: z2.enum(["environment", "verifier", "fixture"]),
251
+ content: z2.string().max(25e4)
114
252
  });
115
- var TrainingPathRecommendationSchema = z.object({
116
- primaryMethod: z.enum(["sft", "dpo", "grpo", "ppo", "sdft", "opsd", "sdpo"]),
117
- bootstrap: z.object({
118
- method: z.literal("sft"),
119
- purpose: z.literal("trajectory_bootstrap"),
120
- demonstrationRefs: z.array(IdSchema).min(1).max(1e5),
121
- limitations: z.array(z.string().trim().min(1).max(5e3)).min(1).max(100)
253
+ var TrainingPathRecommendationSchema = z2.object({
254
+ primaryMethod: z2.enum(["sft", "dpo", "grpo", "ppo", "sdft", "opsd", "sdpo"]),
255
+ bootstrap: z2.object({
256
+ method: z2.literal("sft"),
257
+ purpose: z2.literal("trajectory_bootstrap"),
258
+ demonstrationRefs: z2.array(IdSchema2).min(1).max(1e5),
259
+ limitations: z2.array(z2.string().trim().min(1).max(5e3)).min(1).max(100)
122
260
  }).nullable()
123
261
  });
124
- var TrainingMethodReadinessReasonCodeSchema = z.enum([
262
+ var TrainingMethodReadinessReasonCodeSchema = z2.enum([
125
263
  "taskset_not_ready",
126
264
  "demonstrations_missing",
127
265
  "preference_pairs_missing",
@@ -132,81 +270,81 @@ var TrainingMethodReadinessReasonCodeSchema = z.enum([
132
270
  "value_model_required",
133
271
  "frozen_eval_missing"
134
272
  ]);
135
- var TrainingMethodReadinessSchema = z.object({
136
- method: z.enum(["sft", "dpo", "grpo", "ppo"]),
137
- status: z.enum(["recommended", "compatible", "needs_dataset_work"]),
138
- reasonCodes: z.array(TrainingMethodReadinessReasonCodeSchema).default([]),
139
- reasons: z.array(z.string().trim().min(1).max(5e3)).default([])
273
+ var TrainingMethodReadinessSchema = z2.object({
274
+ method: z2.enum(["sft", "dpo", "grpo", "ppo"]),
275
+ status: z2.enum(["recommended", "compatible", "needs_dataset_work"]),
276
+ reasonCodes: z2.array(TrainingMethodReadinessReasonCodeSchema).default([]),
277
+ reasons: z2.array(z2.string().trim().min(1).max(5e3)).default([])
140
278
  });
141
- var TasksetReadinessFindingSchema = z.object({
142
- code: IdSchema,
143
- message: z.string().trim().min(1).max(5e3),
144
- path: z.string().trim().max(2e3).nullable()
279
+ var TasksetReadinessFindingSchema = z2.object({
280
+ code: IdSchema2,
281
+ message: z2.string().trim().min(1).max(5e3),
282
+ path: z2.string().trim().max(2e3).nullable()
145
283
  });
146
- var TasksetReadinessReportSchema = z.object({
147
- schemaVersion: z.literal("openpond.tasksetReadiness.v1"),
148
- tasksetId: IdSchema,
149
- tasksetHash: HashSchema,
150
- ready: z.boolean(),
151
- recommendedMethod: z.enum(["none", "retrieval", "sft", "dpo", "grpo", "ppo", "sdft", "opd", "opsd", "sdpo"]),
284
+ var TasksetReadinessReportSchema = z2.object({
285
+ schemaVersion: z2.literal("openpond.tasksetReadiness.v1"),
286
+ tasksetId: IdSchema2,
287
+ tasksetHash: HashSchema2,
288
+ ready: z2.boolean(),
289
+ recommendedMethod: z2.enum(["none", "retrieval", "sft", "dpo", "grpo", "ppo", "sdft", "opd", "opsd", "sdpo"]),
152
290
  trainingPath: TrainingPathRecommendationSchema.nullable().default(null),
153
- methodReadiness: z.array(TrainingMethodReadinessSchema).default([]),
154
- compatibleDestinationClasses: z.array(
155
- z.enum(["export", "custom", "hosted_managed"])
291
+ methodReadiness: z2.array(TrainingMethodReadinessSchema).default([]),
292
+ compatibleDestinationClasses: z2.array(
293
+ z2.enum(["export", "custom", "hosted_managed"])
156
294
  ),
157
- blockers: z.array(TasksetReadinessFindingSchema).default([]),
158
- advisories: z.array(TasksetReadinessFindingSchema).default([]),
159
- warnings: z.array(z.string().trim().min(1).max(5e3)).default([]),
160
- generatedAt: TimestampSchema
295
+ blockers: z2.array(TasksetReadinessFindingSchema).default([]),
296
+ advisories: z2.array(TasksetReadinessFindingSchema).default([]),
297
+ warnings: z2.array(z2.string().trim().min(1).max(5e3)).default([]),
298
+ generatedAt: TimestampSchema2
161
299
  });
162
- var AuthoringRepairSchema = z.object({ attempt: z.number().int().positive(), summary: z.string().trim().min(1).max(5e3), createdAt: TimestampSchema });
163
- var AuthoringProvenanceSchema = z.object({
164
- schemaVersion: z.literal("openpond.taskAuthoringProvenance.v1"),
300
+ var AuthoringRepairSchema = z2.object({ attempt: z2.number().int().positive(), summary: z2.string().trim().min(1).max(5e3), createdAt: TimestampSchema2 });
301
+ var AuthoringProvenanceSchema = z2.object({
302
+ schemaVersion: z2.literal("openpond.taskAuthoringProvenance.v1"),
165
303
  model: ChatModelRefSchema.nullable(),
166
- modelConfig: MetadataSchema,
167
- skillHash: HashSchema,
168
- promptTemplateVersion: z.string().trim().min(1).max(200),
304
+ modelConfig: MetadataSchema2,
305
+ skillHash: HashSchema2,
306
+ promptTemplateVersion: z2.string().trim().min(1).max(200),
169
307
  buildIntent: DatasetBuildIntentSchema.default("demonstrations"),
170
308
  buildSpecification: DatasetBuildSpecificationSchema.nullable().default(null),
171
- evidenceHashes: z.array(HashSchema).max(1e5),
172
- tasksetSdkVersion: z.string().trim().min(1).max(100),
173
- sourceCommit: z.string().trim().min(1).max(256).nullable(),
174
- repairHistory: z.array(AuthoringRepairSchema).max(1e3),
175
- createdAt: TimestampSchema
309
+ evidenceHashes: z2.array(HashSchema2).max(1e5),
310
+ tasksetSdkVersion: z2.string().trim().min(1).max(100),
311
+ sourceCommit: z2.string().trim().min(1).max(256).nullable(),
312
+ repairHistory: z2.array(AuthoringRepairSchema).max(1e3),
313
+ createdAt: TimestampSchema2
176
314
  });
177
- var TasksetSchema = z.object({
178
- schemaVersion: z.literal("openpond.taskset.v1"),
179
- id: IdSchema,
180
- revision: z.number().int().positive().default(1),
181
- profileId: IdSchema,
315
+ var TasksetSchema = z2.object({
316
+ schemaVersion: z2.literal("openpond.taskset.v1"),
317
+ id: IdSchema2,
318
+ revision: z2.number().int().positive().default(1),
319
+ profileId: IdSchema2,
182
320
  profileRelease: VersionedReleaseRefSchema.nullable().optional(),
183
321
  createImproveRunId: NullableIdSchema.default(null),
184
- name: z.string().trim().min(1).max(500),
322
+ name: z2.string().trim().min(1).max(500),
185
323
  // Portable tasks may carry all instructions in their individual inputs.
186
324
  // Preserve an absent package prompt; draft publication validates its objective.
187
- objective: z.string().trim().max(2e4),
325
+ objective: z2.string().trim().max(2e4),
188
326
  purpose: TasksetPurposeSchema.default("general"),
189
327
  benchmark: TasksetBenchmarkBindingSchema.nullable().default(null),
190
328
  preferenceComparison: TasksetPreferenceComparisonBindingSchema.nullable().default(null),
191
329
  status: TasksetStatusSchema,
192
- sourceRefs: z.array(TasksetSourceRefSchema).min(1).max(1e5),
330
+ sourceRefs: z2.array(TasksetSourceRefSchema).min(1).max(1e5),
193
331
  datasetArtifact: DatasetArtifactManifestSchema.nullable().optional(),
194
332
  policy: TaskPolicyBoundarySchema,
195
333
  environment: TasksetEnvironmentContractSchema,
196
334
  capabilities: TasksetCapabilityManifestSchema,
197
- metrics: TasksetMetricPolicySchema.optional(),
198
- tasks: z.array(TaskDataRecordSchema).max(1e6),
199
- graders: z.array(GraderSpecSchema).max(1e3),
335
+ metrics: TasksetMetricPolicySchema2.optional(),
336
+ tasks: z2.array(TaskDataRecordSchema).max(1e6),
337
+ graders: z2.array(GraderSpecSchema).max(1e3),
200
338
  // Imported releases are inspectable before local calibration. Admission
201
339
  // requires real fixtures separately in validateTaskset.
202
- graderFixtures: z.array(GraderFixtureSchema).max(1e5),
340
+ graderFixtures: z2.array(GraderFixtureSchema).max(1e5),
203
341
  learningSignals: LearningSignalInventorySchema,
204
342
  authoringProvenance: AuthoringProvenanceSchema,
205
343
  readiness: TasksetReadinessReportSchema.nullable(),
206
- contentHash: HashSchema,
207
- createdAt: TimestampSchema,
208
- updatedAt: TimestampSchema,
209
- metadata: MetadataSchema
344
+ contentHash: HashSchema2,
345
+ createdAt: TimestampSchema2,
346
+ updatedAt: TimestampSchema2,
347
+ metadata: MetadataSchema2
210
348
  }).superRefine((taskset, context) => {
211
349
  if (taskset.purpose === "benchmark" && !taskset.benchmark) {
212
350
  context.addIssue({
@@ -241,6 +379,123 @@ function isTrainingSourceRef(source) {
241
379
  return source.schemaVersion === "openpond.trainingSource.v1";
242
380
  }
243
381
 
382
+ // src/taskset-draft-authoring.ts
383
+ var TasksetDraftPublishError = class extends Error {
384
+ issues;
385
+ constructor(issues) {
386
+ super(issues.map((issue) => issue.message).join("\n"));
387
+ this.name = "TasksetDraftPublishError";
388
+ this.issues = issues;
389
+ }
390
+ };
391
+ function createTasksetDraft(input) {
392
+ const timestamp = input.now ?? (/* @__PURE__ */ new Date()).toISOString();
393
+ const id = input.id?.trim() || `taskset-draft-${globalThis.crypto.randomUUID()}`;
394
+ return TasksetDraftSchema.parse({
395
+ schemaVersion: "openpond.tasksetDraft.v1",
396
+ id,
397
+ revision: 1,
398
+ profileId: input.profileId,
399
+ modelScope: input.modelScope ?? null,
400
+ name: input.name?.trim() ?? "",
401
+ objective: "",
402
+ purpose: "general",
403
+ benchmark: null,
404
+ preferenceComparison: null,
405
+ status: "draft",
406
+ sourceRefs: [],
407
+ datasetArtifact: null,
408
+ policy: {
409
+ policyVisibleFields: ["input"],
410
+ privilegedFields: ["expectedOutput"],
411
+ hiddenGraderRefs: [],
412
+ connectedAppScopes: []
413
+ },
414
+ environment: {
415
+ protocolVersion: "openpond.taskEnvironment.v1",
416
+ kind: "chat",
417
+ entrypoint: "openpond-chat-v1",
418
+ stateful: false,
419
+ deterministicSeeds: true,
420
+ toolNames: [],
421
+ lifecycle: ["create", "reset", "step", "grade", "cleanup"],
422
+ defaultTimeoutMs: 12e4,
423
+ networkPolicy: "none",
424
+ resources: [],
425
+ metadata: {}
426
+ },
427
+ output: {
428
+ mode: "text",
429
+ jsonSchema: null,
430
+ renderer: null
431
+ },
432
+ capabilities: {
433
+ schemaVersion: "openpond.tasksetCapabilities.v1",
434
+ taskKind: "chat",
435
+ supportedSignals: [
436
+ "demonstration",
437
+ "preference",
438
+ "correction",
439
+ "feedback",
440
+ "reward",
441
+ "label"
442
+ ],
443
+ compatibleMethods: ["none"],
444
+ rewardKinds: ["none"],
445
+ requiresTools: false,
446
+ requiresState: false,
447
+ requiresPrivilegedGrading: true,
448
+ environmentPlacements: ["local", "remote", "colocated"],
449
+ exportable: true,
450
+ portabilityBlockers: []
451
+ },
452
+ metrics: {
453
+ schemaVersion: "openpond.tasksetMetricPolicy.v1",
454
+ primaryMetric: "score",
455
+ aggregation: "mean_score",
456
+ missingReward: "zero",
457
+ customAggregator: null
458
+ },
459
+ review: {
460
+ enabled: false,
461
+ candidateCount: 2,
462
+ minimumSamples: 100,
463
+ allowTies: true,
464
+ allowRejectAll: true,
465
+ rubric: "",
466
+ criteria: []
467
+ },
468
+ tasks: [],
469
+ graders: [],
470
+ graderFixtures: [],
471
+ learningSignals: {
472
+ demonstrations: [],
473
+ preferences: [],
474
+ corrections: [],
475
+ feedback: [],
476
+ rewards: [],
477
+ labels: []
478
+ },
479
+ publishedTasksetRef: null,
480
+ createdAt: timestamp,
481
+ updatedAt: timestamp,
482
+ metadata: {}
483
+ });
484
+ }
485
+ function draftPublishIssues(draft) {
486
+ const issues = [];
487
+ if (!draft.name.trim()) issues.push({ code: "name_missing", message: "Name is required.", path: "name" });
488
+ if (!draft.objective.trim()) issues.push({ code: "objective_missing", message: "Objective is required.", path: "objective" });
489
+ if (!draft.datasetArtifact && draft.tasks.length === 0) issues.push({ code: "tasks_missing", message: "Add at least one task or Dataset artifact.", path: "tasks" });
490
+ const sourceIds = new Set(draft.sourceRefs.map((source) => source.id));
491
+ for (const task of draft.tasks) {
492
+ for (const sourceId of task.sourceRefs) {
493
+ if (!sourceIds.has(sourceId)) issues.push({ code: "task_source_missing", message: `Task ${task.id} references missing source ${sourceId}.`, path: `tasks.${task.id}.sourceRefs` });
494
+ }
495
+ }
496
+ return issues;
497
+ }
498
+
244
499
  // src/taskset-authored-validation.ts
245
500
  function validateTaskset(input, options = {}) {
246
501
  const parsed = TasksetSchema.safeParse(input);
@@ -617,6 +872,11 @@ function validateCapabilities(capabilities, issues, taskset) {
617
872
  }
618
873
 
619
874
  export {
875
+ TaskDataDraftSchema,
876
+ TasksetDraftStatusSchema,
877
+ TasksetDraftReviewPolicySchema,
878
+ TasksetDraftOutputContractSchema,
879
+ TasksetDraftSchema,
620
880
  TASKSET_WORK_TOOL_NAMES,
621
881
  TasksetStatusSchema,
622
882
  DatasetBuildIntentSchema,
@@ -631,8 +891,11 @@ export {
631
891
  AuthoringProvenanceSchema,
632
892
  TasksetSchema,
633
893
  isTrainingSourceRef,
894
+ TasksetDraftPublishError,
895
+ createTasksetDraft,
896
+ draftPublishIssues,
634
897
  validateTaskset,
635
898
  computeTasksetHash,
636
899
  validatePortability
637
900
  };
638
- //# sourceMappingURL=chunk-7AZDNZP6.js.map
901
+ //# sourceMappingURL=chunk-CWXM57QR.js.map