openpond-sdk 0.5.27 → 0.6.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 (86) hide show
  1. package/LEARNING.md +18 -0
  2. package/TASKSETS.md +20 -4
  3. package/dist/{chunk-SQCACAC7.js → chunk-2FKPFZO5.js} +2 -2
  4. package/dist/{chunk-S7I45WJQ.js → chunk-2U54EOXJ.js} +3 -2
  5. package/dist/chunk-2U54EOXJ.js.map +7 -0
  6. package/dist/chunk-3KXDH6OB.js +16 -0
  7. package/dist/chunk-3KXDH6OB.js.map +7 -0
  8. package/dist/{chunk-GZOXT7YE.js → chunk-E5IFONUB.js} +2 -2
  9. package/dist/{chunk-ULQC4SQF.js → chunk-GJ62G6BO.js} +4 -4
  10. package/dist/{chunk-5M3PPP7D.js → chunk-K4C5QOSV.js} +9 -1
  11. package/dist/chunk-K4C5QOSV.js.map +7 -0
  12. package/dist/{chunk-IDLMILN4.js → chunk-T5JMZVQR.js} +22 -15
  13. package/dist/chunk-T5JMZVQR.js.map +7 -0
  14. package/dist/{chunk-AUQOAMHL.js → chunk-TB33HKGV.js} +2 -2
  15. package/dist/{chunk-DV7XI3UE.js → chunk-VW2SNUWB.js} +8 -4
  16. package/dist/chunk-VW2SNUWB.js.map +7 -0
  17. package/dist/{chunk-ZNFOVV7B.js → chunk-XANQWTTP.js} +16 -7
  18. package/dist/chunk-XANQWTTP.js.map +7 -0
  19. package/dist/index.js +1 -1
  20. package/dist/learning.js +51 -8
  21. package/dist/learning.js.map +2 -2
  22. package/dist/model-projects.js +5 -1
  23. package/dist/model-starter-attempts.js +3 -2
  24. package/dist/model-starter-catalog.js +6 -5
  25. package/dist/model-starter-catalog.js.map +1 -1
  26. package/dist/model-starters.js +6 -5
  27. package/dist/model-taskset-authoring.js +1 -1
  28. package/dist/model-taskset-runs.js +3 -2
  29. package/dist/model-taskset-runs.js.map +1 -1
  30. package/dist/taskset-drafts.js +6 -5
  31. package/dist/taskset-drafts.js.map +1 -1
  32. package/dist/taskset-packages.js +209 -46
  33. package/dist/taskset-packages.js.map +4 -4
  34. package/dist/training-bundle.js +6 -5
  35. package/dist/training-bundle.js.map +1 -1
  36. package/dist/training.js +3 -2
  37. package/dist/types/packages/sdk/src/learning-client.d.ts +11 -0
  38. package/dist/types/packages/sdk/src/learning-client.d.ts.map +1 -1
  39. package/dist/types/packages/sdk/src/model-bound-taskset-authoring.d.ts +10 -0
  40. package/dist/types/packages/sdk/src/model-bound-taskset-authoring.d.ts.map +1 -0
  41. package/dist/types/packages/sdk/src/model-learning-intent.d.ts +16 -0
  42. package/dist/types/packages/sdk/src/model-learning-intent.d.ts.map +1 -0
  43. package/dist/types/packages/sdk/src/model-learning-policy.d.ts +155 -1
  44. package/dist/types/packages/sdk/src/model-learning-policy.d.ts.map +1 -1
  45. package/dist/types/packages/sdk/src/model-ordinary-taskset-reward.d.ts +16 -0
  46. package/dist/types/packages/sdk/src/model-ordinary-taskset-reward.d.ts.map +1 -0
  47. package/dist/types/packages/sdk/src/model-projects.d.ts +14 -1
  48. package/dist/types/packages/sdk/src/model-projects.d.ts.map +1 -1
  49. package/dist/types/packages/sdk/src/model-starters.d.ts +30 -0
  50. package/dist/types/packages/sdk/src/model-starters.d.ts.map +1 -1
  51. package/dist/types/packages/sdk/src/model-taskset-authoring-contracts.d.ts +1 -0
  52. package/dist/types/packages/sdk/src/model-taskset-authoring-contracts.d.ts.map +1 -1
  53. package/dist/types/packages/sdk/src/model-taskset-authoring.d.ts +1 -0
  54. package/dist/types/packages/sdk/src/model-taskset-authoring.d.ts.map +1 -1
  55. package/dist/types/packages/sdk/src/model-taskset-derivation.d.ts +11 -0
  56. package/dist/types/packages/sdk/src/model-taskset-derivation.d.ts.map +1 -1
  57. package/dist/types/packages/sdk/src/taskset-draft-api-contracts.d.ts +2 -0
  58. package/dist/types/packages/sdk/src/taskset-draft-api-contracts.d.ts.map +1 -1
  59. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts +6 -0
  60. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts.map +1 -1
  61. package/dist/types/packages/sdk/src/taskset-draft-document.d.ts +1 -0
  62. package/dist/types/packages/sdk/src/taskset-draft-document.d.ts.map +1 -1
  63. package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts +3 -0
  64. package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts.map +1 -1
  65. package/dist/types/packages/sdk/src/taskset-draft-source.d.ts +2 -0
  66. package/dist/types/packages/sdk/src/taskset-draft-source.d.ts.map +1 -1
  67. package/dist/types/packages/sdk/src/taskset-draft-workspace.d.ts +2 -0
  68. package/dist/types/packages/sdk/src/taskset-draft-workspace.d.ts.map +1 -1
  69. package/dist/types/packages/sdk/src/taskset-package-client.d.ts +3 -0
  70. package/dist/types/packages/sdk/src/taskset-package-client.d.ts.map +1 -1
  71. package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts +2 -0
  72. package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts.map +1 -1
  73. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts +1 -0
  74. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts.map +1 -1
  75. package/dist/types/packages/sdk/src/taskset-packages.d.ts +1 -0
  76. package/dist/types/packages/sdk/src/taskset-packages.d.ts.map +1 -1
  77. package/package.json +2 -2
  78. package/dist/chunk-5M3PPP7D.js.map +0 -7
  79. package/dist/chunk-DV7XI3UE.js.map +0 -7
  80. package/dist/chunk-IDLMILN4.js.map +0 -7
  81. package/dist/chunk-S7I45WJQ.js.map +0 -7
  82. package/dist/chunk-ZNFOVV7B.js.map +0 -7
  83. /package/dist/{chunk-SQCACAC7.js.map → chunk-2FKPFZO5.js.map} +0 -0
  84. /package/dist/{chunk-GZOXT7YE.js.map → chunk-E5IFONUB.js.map} +0 -0
  85. /package/dist/{chunk-ULQC4SQF.js.map → chunk-GJ62G6BO.js.map} +0 -0
  86. /package/dist/{chunk-AUQOAMHL.js.map → chunk-TB33HKGV.js.map} +0 -0
package/LEARNING.md CHANGED
@@ -120,3 +120,21 @@ preparation. The returned `tasksetAssetBytes` map uses task-scoped paths and is
120
120
  passed to `buildTasksetTrainingBundle` or materialized beside the local Taskset.
121
121
  Input content participates in the existing privacy scan. File state is reset and
122
122
  cleaned up between attempts; a Work environment may hold state during an attempt.
123
+
124
+ ### Simple continual-learning creation
125
+
126
+ Hosted creation can pass `learning` to `createModelProjectSaveRequest` as its
127
+ third argument, or in `createModelStarterCreationRequest`. The intent contains
128
+ `mode` (`nightly` or `approved_count`), `minimumTasks`, `localTime`, `timeZone`,
129
+ `maximumSpendUsd` and `maximumDailySpendUsd`. It participates in the operation
130
+ hash. The hosted owner commits the Model, exact task source, enabled policy and
131
+ receipt together; a failed policy cannot leave a partially created Model.
132
+ Local creation rejects this hosted intent. Existing Models edit the authoritative
133
+ policy with Learning commands instead of resubmitting creation preferences.
134
+
135
+ `createHostedLearningPolicyContent` accepts an explicit `settings.trigger` for
136
+ nightly, task-count, interval or manual policies. New settings default to ten
137
+ tasks; existing policy limits remain unchanged. Candidates still require explicit
138
+ acceptance and serving selection. `learning.inspectTaskQueue(modelProjectId?)`
139
+ returns the shared eligible, unconsumed task count, or explicit issues when the
140
+ count cannot be determined.
package/TASKSETS.md CHANGED
@@ -186,10 +186,26 @@ reseals the environment before publication, while historical revisions keep
186
186
  their original executable files.
187
187
 
188
188
  These pure helpers require the host to persist draft files and commit publication,
189
- Model selection and retry receipts atomically. Bound Reward packages and reviewed
190
- batches use their respective authoring graphs and are rejected by this ordinary
191
- package compiler. Draft persistence, HTTP operations and editor controls are host
192
- integration work.
189
+ Model selection and retry receipts atomically. Bound Reward packages use the same
190
+ draft workflow with `authoringGraph: "bound"` in their retained preparation.
191
+ Pass the original `source` package to `publishModelTasksetDraftPackage` or
192
+ `compileModelTasksetDraftWorkspace` for these drafts. Task edits preserve the
193
+ exact saved Reward, task format and private dependency graph; changing graders
194
+ requires publishing/selecting a Reward through its own editor. Unchanged
195
+ environment execution retains its release. Publication creates an owned revision
196
+ and clears package qualification; it never changes the original source. Reviewed
197
+ batches still require their review/regrading workflow.
198
+
199
+ `bindOrdinaryModelTasksetReward({ owner, source, rewardBinding, rewards, assets })`
200
+ prepares a complete model-owned package when a user selects a saved Reward for an
201
+ ordinary collection. The source must include collection instructions. This keeps
202
+ task envelopes, per-task output contracts, binary files, private context and tools
203
+ intact. Its model resources explicitly declare `instructionMode: "per_task"` so
204
+ task-specific context is preserved independently of the collection instruction.
205
+ The selected Reward's private assets must resolve exactly. Hosts commit the new
206
+ package and Model selection with their CAS and retry receipt, regenerate stale
207
+ recipes, and advance an evaluation selection that referred to the edited source.
208
+ An independently selected evaluation package remains pinned.
193
209
 
194
210
  ## Shared draft documents and compilation
195
211
 
@@ -2,7 +2,7 @@ import {
2
2
  ModelProjectVersionedRefSchema,
3
3
  canonicalJson,
4
4
  canonicalSha256
5
- } from "./chunk-ZNFOVV7B.js";
5
+ } from "./chunk-XANQWTTP.js";
6
6
 
7
7
  // src/model-starter-attempts.ts
8
8
  import { z } from "zod";
@@ -174,4 +174,4 @@ export {
174
174
  OpenPondModelStarterAttemptError,
175
175
  OpenPondModelStarterAttemptsClient
176
176
  };
177
- //# sourceMappingURL=chunk-SQCACAC7.js.map
177
+ //# sourceMappingURL=chunk-2FKPFZO5.js.map
@@ -25,7 +25,8 @@ var ModelTasksetDraftPreparationSchema = z.object({
25
25
  sourceTasksetRef: LearningRevisionRefSchema,
26
26
  tasksetId: IdSchema,
27
27
  tasksetRevision: z.number().int().positive(),
28
- lineage: ModelTasksetAuthoringSchema
28
+ lineage: ModelTasksetAuthoringSchema,
29
+ authoringGraph: z.literal("bound").optional()
29
30
  }).strict();
30
31
  var TasksetDraftFilePathSchema = z.string().min(1).max(1024).refine((value) => !value.includes("\\") && !value.includes(":") && !value.includes("\0") && !value.startsWith("/") && !value.split("/").some((part) => !part || part === "." || part === ".." || part.startsWith(".env")), "Use a relative Taskset file path without environment files.");
31
32
  var TasksetDraftFileInfoSchema = z.object({
@@ -54,4 +55,4 @@ export {
54
55
  TasksetDraftFileSchema,
55
56
  TasksetDraftFileMutationSchema
56
57
  };
57
- //# sourceMappingURL=chunk-S7I45WJQ.js.map
58
+ //# sourceMappingURL=chunk-2U54EOXJ.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/model-taskset-authoring-contracts.ts"],
4
+ "sourcesContent": ["import { z } from \"zod\";\nimport { LearningRevisionRefSchema } from \"@openpond/evals/learning\";\n\nconst IdSchema = LearningRevisionRefSchema.shape.id;\nconst HashSchema = z.string().regex(/^[a-f0-9]{64}$/);\nexport const ModelTasksetAuthoringOwnerSchema = z.object({ scopeId: IdSchema, modelId: IdSchema }).strict();\n\n/** Ordinary authoring preserves its own lineage without inventing a Reward\n * binding or replacing an admitted learning graph. Hosts authorize the owner. */\nexport const ModelTasksetAuthoringSchema = z.object({\n schemaVersion: z.literal(\"openpond.modelTasksetAuthoring.v1\"),\n owner: ModelTasksetAuthoringOwnerSchema,\n root: LearningRevisionRefSchema,\n parent: LearningRevisionRefSchema,\n}).strict();\n\nexport const ModelTasksetDraftRequestSchema = z.object({\n schemaVersion: z.literal(\"openpond.modelTasksetDraftRequest.v1\"),\n operationId: IdSchema,\n modelId: IdSchema,\n expectedModelRevision: z.number().int().positive(),\n sourcePackageHash: HashSchema,\n}).strict();\nexport type ModelTasksetDraftRequest = z.infer<typeof ModelTasksetDraftRequestSchema>;\n\n/** Persist this preparation before materializing the editable workspace. */\nexport const ModelTasksetDraftPreparationSchema = z.object({\n schemaVersion: z.literal(\"openpond.modelTasksetDraftPreparation.v1\"),\n draftId: IdSchema,\n requestHash: HashSchema,\n sourcePackageHash: HashSchema,\n sourceTasksetRef: LearningRevisionRefSchema,\n tasksetId: IdSchema,\n tasksetRevision: z.number().int().positive(),\n lineage: ModelTasksetAuthoringSchema,\n authoringGraph: z.literal(\"bound\").optional(),\n}).strict();\nexport type ModelTasksetDraftPreparation = z.infer<typeof ModelTasksetDraftPreparationSchema>;\n\nexport const TasksetDraftFilePathSchema = z.string().min(1).max(1024).refine(value =>\n !value.includes(\"\\\\\") && !value.includes(\":\") && !value.includes(\"\\0\") && !value.startsWith(\"/\")\n && !value.split(\"/\").some(part => !part || part === \".\" || part === \"..\" || part.startsWith(\".env\")), \"Use a relative Taskset file path without environment files.\");\nexport const TasksetDraftFileInfoSchema = z.object({\n path: TasksetDraftFilePathSchema,\n sizeBytes: z.number().int().nonnegative(),\n writable: z.boolean(),\n}).strict();\nexport const TasksetDraftFileContentSchema = z.object({ encoding: z.enum([\"utf8\", \"base64\"]), data: z.string().max(8_000_000) }).strict();\nexport const TasksetDraftFileSchema = TasksetDraftFileInfoSchema.extend({ contentHash: HashSchema, content: TasksetDraftFileContentSchema }).strict();\nexport const TasksetDraftFileMutationSchema = z.object({\n draftId: IdSchema,\n expectedDraftRevision: z.number().int().positive(),\n path: TasksetDraftFilePathSchema,\n expectedFileHash: HashSchema.nullable(),\n content: TasksetDraftFileContentSchema.nullable(),\n}).strict();\nexport type TasksetDraftFileInfo = z.infer<typeof TasksetDraftFileInfoSchema>;\nexport type TasksetDraftFile = z.infer<typeof TasksetDraftFileSchema>;\nexport type TasksetDraftFileMutation = z.infer<typeof TasksetDraftFileMutationSchema>;\n"],
5
+ "mappings": ";AAAA,SAAS,SAAS;AAClB,SAAS,iCAAiC;AAE1C,IAAM,WAAW,0BAA0B,MAAM;AACjD,IAAM,aAAa,EAAE,OAAO,EAAE,MAAM,gBAAgB;AAC7C,IAAM,mCAAmC,EAAE,OAAO,EAAE,SAAS,UAAU,SAAS,SAAS,CAAC,EAAE,OAAO;AAInG,IAAM,8BAA8B,EAAE,OAAO;AAAA,EAClD,eAAe,EAAE,QAAQ,mCAAmC;AAAA,EAC5D,OAAO;AAAA,EACP,MAAM;AAAA,EACN,QAAQ;AACV,CAAC,EAAE,OAAO;AAEH,IAAM,iCAAiC,EAAE,OAAO;AAAA,EACrD,eAAe,EAAE,QAAQ,sCAAsC;AAAA,EAC/D,aAAa;AAAA,EACb,SAAS;AAAA,EACT,uBAAuB,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACjD,mBAAmB;AACrB,CAAC,EAAE,OAAO;AAIH,IAAM,qCAAqC,EAAE,OAAO;AAAA,EACzD,eAAe,EAAE,QAAQ,0CAA0C;AAAA,EACnE,SAAS;AAAA,EACT,aAAa;AAAA,EACb,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,WAAW;AAAA,EACX,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EAC3C,SAAS;AAAA,EACT,gBAAgB,EAAE,QAAQ,OAAO,EAAE,SAAS;AAC9C,CAAC,EAAE,OAAO;AAGH,IAAM,6BAA6B,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,OAAO,WAC3E,CAAC,MAAM,SAAS,IAAI,KAAK,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,SAAS,IAAI,KAAK,CAAC,MAAM,WAAW,GAAG,KAC5F,CAAC,MAAM,MAAM,GAAG,EAAE,KAAK,UAAQ,CAAC,QAAQ,SAAS,OAAO,SAAS,QAAQ,KAAK,WAAW,MAAM,CAAC,GAAG,6DAA6D;AAC9J,IAAM,6BAA6B,EAAE,OAAO;AAAA,EACjD,MAAM;AAAA,EACN,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACxC,UAAU,EAAE,QAAQ;AACtB,CAAC,EAAE,OAAO;AACH,IAAM,gCAAgC,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,QAAQ,QAAQ,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI,GAAS,EAAE,CAAC,EAAE,OAAO;AACjI,IAAM,yBAAyB,2BAA2B,OAAO,EAAE,aAAa,YAAY,SAAS,8BAA8B,CAAC,EAAE,OAAO;AAC7I,IAAM,iCAAiC,EAAE,OAAO;AAAA,EACrD,SAAS;AAAA,EACT,uBAAuB,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACjD,MAAM;AAAA,EACN,kBAAkB,WAAW,SAAS;AAAA,EACtC,SAAS,8BAA8B,SAAS;AAClD,CAAC,EAAE,OAAO;",
6
+ "names": []
7
+ }
@@ -0,0 +1,16 @@
1
+ // src/model-learning-intent.ts
2
+ import { NightlyScheduleSchema } from "@openpond/evals/learning";
3
+ import { z } from "zod";
4
+ var ModelInitialLearningSchema = NightlyScheduleSchema.extend({
5
+ mode: z.enum(["nightly", "approved_count"]),
6
+ minimumTasks: z.number().int().min(1).max(1e4),
7
+ maximumSpendUsd: z.number().positive().max(1e5),
8
+ maximumDailySpendUsd: z.number().positive().max(1e6)
9
+ }).strict().superRefine((value, context) => {
10
+ if (value.maximumDailySpendUsd < value.maximumSpendUsd) context.addIssue({ code: "custom", path: ["maximumDailySpendUsd"], message: "The daily budget must cover one update." });
11
+ });
12
+
13
+ export {
14
+ ModelInitialLearningSchema
15
+ };
16
+ //# sourceMappingURL=chunk-3KXDH6OB.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/model-learning-intent.ts"],
4
+ "sourcesContent": ["import { NightlyScheduleSchema } from \"@openpond/evals/learning\";\nimport { z } from \"zod\";\n\n/** An explicit creation choice, committed atomically with its new Model.\n * Existing Models edit the authoritative policy through Learning commands. */\nexport const ModelInitialLearningSchema = NightlyScheduleSchema.extend({\n mode: z.enum([\"nightly\", \"approved_count\"]),\n minimumTasks: z.number().int().min(1).max(10_000),\n maximumSpendUsd: z.number().positive().max(100_000),\n maximumDailySpendUsd: z.number().positive().max(1_000_000),\n}).strict().superRefine((value, context) => {\n if (value.maximumDailySpendUsd < value.maximumSpendUsd) context.addIssue({ code: \"custom\", path: [\"maximumDailySpendUsd\"], message: \"The daily budget must cover one update.\" });\n});\nexport type ModelInitialLearning = z.infer<typeof ModelInitialLearningSchema>;\n"],
5
+ "mappings": ";AAAA,SAAS,6BAA6B;AACtC,SAAS,SAAS;AAIX,IAAM,6BAA6B,sBAAsB,OAAO;AAAA,EACrE,MAAM,EAAE,KAAK,CAAC,WAAW,gBAAgB,CAAC;AAAA,EAC1C,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAM;AAAA,EAChD,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,GAAO;AAAA,EAClD,sBAAsB,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,GAAS;AAC3D,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,YAAY;AAC1C,MAAI,MAAM,uBAAuB,MAAM,gBAAiB,SAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,sBAAsB,GAAG,SAAS,0CAA0C,CAAC;AACjL,CAAC;",
6
+ "names": []
7
+ }
@@ -17,7 +17,7 @@ import {
17
17
  assertCanonicalPayloadSize,
18
18
  canonicalSha256,
19
19
  parseBoundedJson
20
- } from "./chunk-ZNFOVV7B.js";
20
+ } from "./chunk-XANQWTTP.js";
21
21
 
22
22
  // src/training.ts
23
23
  import { z as z6 } from "zod";
@@ -865,4 +865,4 @@ export {
865
865
  TrainingCapabilitiesSchema,
866
866
  createTrainingClient
867
867
  };
868
- //# sourceMappingURL=chunk-GZOXT7YE.js.map
868
+ //# sourceMappingURL=chunk-E5IFONUB.js.map
@@ -20,13 +20,13 @@ import {
20
20
  TasksetPackageSchema,
21
21
  tasksetPackageRewardBinding,
22
22
  validateTasksetPackage
23
- } from "./chunk-IDLMILN4.js";
23
+ } from "./chunk-T5JMZVQR.js";
24
24
  import {
25
25
  ModelTasksetDraftPreparationSchema,
26
26
  TasksetDraftFileContentSchema,
27
27
  TasksetDraftFileMutationSchema,
28
28
  TasksetDraftFilePathSchema
29
- } from "./chunk-S7I45WJQ.js";
29
+ } from "./chunk-2U54EOXJ.js";
30
30
  import {
31
31
  TasksetCatalogReleaseRefSchema
32
32
  } from "./chunk-A4ZDOZKP.js";
@@ -39,7 +39,7 @@ import {
39
39
  HostedModelProjectSummarySchema,
40
40
  HostedModelProjectSyncSchema,
41
41
  HostedModelProjectTrainingSetupSchema
42
- } from "./chunk-ZNFOVV7B.js";
42
+ } from "./chunk-XANQWTTP.js";
43
43
 
44
44
  // src/taskset-package-client.ts
45
45
  import { z } from "zod";
@@ -917,4 +917,4 @@ export {
917
917
  saveTasksetDraftWorkspaceFile,
918
918
  decodeTasksetDraftWorkspaceFile
919
919
  };
920
- //# sourceMappingURL=chunk-ULQC4SQF.js.map
920
+ //# sourceMappingURL=chunk-GJ62G6BO.js.map
@@ -60,6 +60,7 @@ import {
60
60
  TaskEvidenceInspectionResultSchema,
61
61
  sameLearningRef,
62
62
  LearningPolicyInspectionResultSchema,
63
+ LearningTaskQueueInspectionSchema,
63
64
  assertLearningRequestJson,
64
65
  learningResourceSchemas
65
66
  } from "@openpond/evals/learning";
@@ -120,6 +121,13 @@ var OpenPondLearningClient = class {
120
121
  return result;
121
122
  }
122
123
  /** Read current shared eligibility and budget without reserving or launching work. */
124
+ async inspectTaskQueue(modelProjectId = null, options = {}) {
125
+ const request = LearningReadRequestSchema.parse({ action: "inspect_task_queue", scope: this.#options.scope, modelProjectId });
126
+ const result = LearningTaskQueueInspectionSchema.parse(await this.#request("read", request, options));
127
+ if (result.modelProjectId !== modelProjectId) throw new OpenPondLearningError(502, "model_identity_mismatch", "Task queue did not match the requested Model.", null);
128
+ return result;
129
+ }
130
+ /** Read current shared eligibility and budget without reserving or launching work. */
123
131
  async inspectPolicy(policy, options = {}) {
124
132
  const request = LearningReadRequestSchema.parse({ action: "inspect_policy", scope: this.#options.scope, policy });
125
133
  const result = LearningPolicyInspectionResultSchema.parse(await this.#request("read", request, options));
@@ -225,4 +233,4 @@ export {
225
233
  OpenPondLearningError,
226
234
  OpenPondLearningClient
227
235
  };
228
- //# sourceMappingURL=chunk-5M3PPP7D.js.map
236
+ //# sourceMappingURL=chunk-K4C5QOSV.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/learning-credentials.ts", "../src/learning-client.ts"],
4
+ "sourcesContent": ["import { z } from \"zod\";\nimport { ReleaseIdSchema } from \"@openpond/harness\";\nimport { LearningRevisionRefSchema } from \"@openpond/evals/learning\";\nimport { TaskSplitSchema } from \"@openpond/evals/tasksets\";\n\n/** Source credentials can submit evidence and feedback for one source only. */\nexport const LearningSourceCredentialSchema = z.object({\n id: ReleaseIdSchema,\n scope: ReleaseIdSchema,\n sourceId: ReleaseIdSchema,\n name: z.string().trim().min(1).max(100),\n keyPrefix: z.string().min(1).max(100),\n createdAt: z.iso.datetime(),\n expiresAt: z.iso.datetime(),\n revokedAt: z.iso.datetime().nullable(),\n}).strict();\nexport type LearningSourceCredential = z.infer<typeof LearningSourceCredentialSchema>;\nexport const LearningSourceCredentialSecretSchema = z.string().regex(/^opk_key_[A-Za-z0-9]{16}_[A-Za-z0-9]{48}$/);\n\nexport const LearningSourceCredentialRequestSchema = z.discriminatedUnion(\"action\", [\n z.object({ action: z.literal(\"create\"), scope: ReleaseIdSchema, sourceId: ReleaseIdSchema, name: z.string().trim().min(1).max(100), expiresAt: z.iso.datetime(), operationId: ReleaseIdSchema, apiKey: LearningSourceCredentialSecretSchema }).strict(),\n z.object({ action: z.literal(\"list\"), scope: ReleaseIdSchema, sourceId: ReleaseIdSchema, afterId: ReleaseIdSchema.optional(), limit: z.number().int().min(1).max(100).default(30) }).strict(),\n z.object({ action: z.literal(\"revoke\"), scope: ReleaseIdSchema, sourceId: ReleaseIdSchema, id: ReleaseIdSchema }).strict(),\n]);\nexport type LearningSourceCredentialRequest = z.infer<typeof LearningSourceCredentialRequestSchema>;\nexport const LearningSourceCredentialCreatedSchema = z.object({ credential: LearningSourceCredentialSchema, apiKey: LearningSourceCredentialSecretSchema }).strict();\nexport const LearningSourceCredentialPageSchema = z.object({ items: z.array(LearningSourceCredentialSchema).max(100), nextCursor: ReleaseIdSchema.nullable() }).strict();\nexport const LearningSourceConfigurationRequestSchema = z.object({ scope: ReleaseIdSchema, sourceId: ReleaseIdSchema }).strict();\nexport const LearningSourceConfigurationSchema = z.object({\n scope: ReleaseIdSchema, source: LearningRevisionRefSchema, taskDefinition: LearningRevisionRefSchema,\n enabled: z.boolean(), allowedSplits: z.array(TaskSplitSchema).min(1).max(4),\n}).strict();\n\n/** Keep this request in memory for retries. Hosts persist hashes, never its secret. */\nexport function createSourceCredentialRequest(input: { sourceId: string; name: string; expiresAt: string }) {\n return { ...input, operationId: crypto.randomUUID(), apiKey: `opk_key_${randomToken(16)}_${randomToken(48)}` };\n}\n\nfunction randomToken(length: number): string {\n const alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n let value = \"\";\n while (value.length < length) {\n for (const byte of crypto.getRandomValues(new Uint8Array(64))) {\n // Rejection sampling avoids modulo bias in the 62-character alphabet.\n if (byte < 248) value += alphabet[byte % 62];\n if (value.length === length) return value;\n }\n }\n return value;\n}\n\n/** Hosts enforce expiry when issuing and authenticating; tokens are never permanent. */\nexport function assertLearningCredentialExpiry(expiresAt: string, now: Date): void {\n const expires = Date.parse(z.iso.datetime().parse(expiresAt));\n if (expires <= now.getTime() || expires > now.getTime() + 90 * 24 * 60 * 60 * 1_000) throw new Error(\"Source credentials must expire within 90 days.\");\n}\n", "import { z } from \"zod\";\nimport {\n LearningCommandRequestSchema, LearningOperationResultSchema, LearningReadRequestSchema,\n TaskEvidenceInspectionResultSchema, sameLearningRef, type LearningRevisionRef,\n LearningPolicyInspectionResultSchema,\n LearningTaskQueueInspectionSchema,\n assertLearningRequestJson,\n learningResourceSchemas, type LearningCommand, type LearningOperationResult,\n type LearningResourceFor, type LearningResourceKind, type LearningResourcePage,\n type LearningResourceQuery, type TaskExampleSubmission, type TaskFeedbackSubmission,\n} from \"@openpond/evals/learning\";\nimport { assertBoundedTaskJson } from \"@openpond/evals/task-schema\";\nimport { LearningSourceCredentialSchema, LearningSourceCredentialRequestSchema, LearningSourceCredentialCreatedSchema, LearningSourceCredentialPageSchema, LearningSourceConfigurationRequestSchema, LearningSourceConfigurationSchema, type LearningSourceCredentialRequest } from \"./learning-credentials.js\";\n\nexport interface OpenPondLearningClientOptions {\n apiKey: string;\n baseUrl: string;\n /** Local profile or hosted team scope. The server checks the credential's ownership. */\n scope: string;\n fetch?: typeof globalThis.fetch;\n}\nexport interface LearningRequestOptions { signal?: AbortSignal }\nexport const LearningBatchPublicationSchema = z.object({\n batchId: z.string().trim().min(1).max(500), modelProjectId: z.string().trim().min(1).max(500),\n}).strict();\nexport const LearningBatchPublicationResultSchema = z.object({\n batchId: z.string().min(1), projectId: z.string().min(1), tasksetId: z.string().min(1),\n releaseId: z.string().min(1), revision: z.number().int().positive(), contentHash: z.string().regex(/^[a-f0-9]{64}$/),\n}).strict();\nexport class OpenPondLearningError extends Error {\n constructor(readonly status: number, readonly code: string, message: string, readonly details: unknown) {\n super(message);\n this.name = \"OpenPondLearningError\";\n }\n}\n\n/** The same portable commands are sent to the local and hosted execution owner. */\nexport class OpenPondLearningClient {\n readonly #options: OpenPondLearningClientOptions;\n constructor(options: OpenPondLearningClientOptions) {\n if (!options.apiKey.trim() || !options.scope.trim()) throw new Error(\"Learning API key and scope are required.\");\n const url = new URL(options.baseUrl);\n if (![\"http:\", \"https:\"].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new Error(\"Learning base URL must be an HTTP(S) endpoint without credentials, query, or fragment.\");\n this.#options = { ...options, baseUrl: url.toString().replace(/\\/+$/, \"\") };\n }\n\n async command(command: LearningCommand, options: LearningRequestOptions = {}): Promise<LearningOperationResult> {\n assertLearningRequestJson(command);\n const request = LearningCommandRequestSchema.parse({ scope: this.#options.scope, command });\n const result = LearningOperationResultSchema.parse(await this.#request(\"commands\", request, options));\n if (result.operationId !== command.operationId) throw new OpenPondLearningError(502, \"operation_identity_mismatch\", \"Learning response did not match the submitted operation.\", null);\n return result;\n }\n\n submitExample(example: TaskExampleSubmission, options: LearningRequestOptions = {}) {\n return this.command({ action: \"submit_example\", operationId: example.idempotencyKey, example }, options);\n }\n\n submitFeedback(feedback: TaskFeedbackSubmission, options: LearningRequestOptions = {}) {\n return this.command({ action: \"submit_feedback\", operationId: feedback.idempotencyKey, feedback }, options);\n }\n\n async get<K extends LearningResourceKind>(kind: K, id: string, revision?: number, options: LearningRequestOptions = {}): Promise<LearningResourceFor<K>> {\n const request = LearningReadRequestSchema.parse({ action: \"get\", scope: this.#options.scope, kind, id, ...(revision === undefined ? {} : { revision }) });\n return learningResourceSchemas[kind].parse(await this.#request(\"read\", request, options)) as LearningResourceFor<K>;\n }\n\n async inspectEvidence(evidence: LearningRevisionRef, options: LearningRequestOptions = {}) {\n const request = LearningReadRequestSchema.parse({ action: \"inspect_evidence\", scope: this.#options.scope, evidence });\n const result = TaskEvidenceInspectionResultSchema.parse(await this.#request(\"read\", request, options));\n if (!sameLearningRef(result.evidence, evidence)) throw new OpenPondLearningError(502, \"evidence_identity_mismatch\", \"Inspection did not match the requested evidence release.\", null);\n return result;\n }\n\n /** Read current shared eligibility and budget without reserving or launching work. */\n async inspectTaskQueue(modelProjectId: string | null = null, options: LearningRequestOptions = {}) {\n const request = LearningReadRequestSchema.parse({ action: \"inspect_task_queue\", scope: this.#options.scope, modelProjectId });\n const result = LearningTaskQueueInspectionSchema.parse(await this.#request(\"read\", request, options));\n if (result.modelProjectId !== modelProjectId) throw new OpenPondLearningError(502, \"model_identity_mismatch\", \"Task queue did not match the requested Model.\", null);\n return result;\n }\n\n /** Read current shared eligibility and budget without reserving or launching work. */\n async inspectPolicy(policy: LearningRevisionRef, options: LearningRequestOptions = {}) {\n const request = LearningReadRequestSchema.parse({ action: \"inspect_policy\", scope: this.#options.scope, policy });\n const result = LearningPolicyInspectionResultSchema.parse(await this.#request(\"read\", request, options));\n if (!sameLearningRef(result.policy, policy)) throw new OpenPondLearningError(502, \"policy_identity_mismatch\", \"Inspection did not match the requested policy release.\", null);\n return result;\n }\n\n /** Prepare once with createSourceCredentialRequest and reuse it for retries. */\n async createSourceCredential(input: Omit<Extract<LearningSourceCredentialRequest, { action: \"create\" }>, \"action\" | \"scope\">, options: LearningRequestOptions = {}) {\n const request = LearningSourceCredentialRequestSchema.parse({ ...input, action: \"create\", scope: this.#options.scope });\n const result = LearningSourceCredentialCreatedSchema.parse(await this.#request(\"credentials\", request, options));\n this.#assertCredentialScope(result.credential, input.sourceId);\n if (result.apiKey !== input.apiKey || !input.apiKey.startsWith(`${result.credential.keyPrefix}_`)) throw new OpenPondLearningError(502, \"credential_identity_mismatch\", \"Credential response did not match the prepared credential.\", null);\n return result;\n }\n\n async listSourceCredentials(sourceId: string, query: { afterId?: string; limit?: number } = {}, options: LearningRequestOptions = {}) {\n const request = LearningSourceCredentialRequestSchema.parse({ ...query, action: \"list\", scope: this.#options.scope, sourceId });\n const result = LearningSourceCredentialPageSchema.parse(await this.#request(\"credentials\", request, options));\n if (result.items.length > (query.limit ?? 30)) throw new OpenPondLearningError(502, \"credential_page_invalid\", \"Credential response exceeded the requested page size.\", null);\n for (const item of result.items) this.#assertCredentialScope(item, sourceId);\n return result;\n }\n\n async revokeSourceCredential(sourceId: string, id: string, options: LearningRequestOptions = {}) {\n const request = LearningSourceCredentialRequestSchema.parse({ action: \"revoke\", scope: this.#options.scope, sourceId, id });\n const result = LearningSourceCredentialSchema.parse(await this.#request(\"credentials\", request, options));\n this.#assertCredentialScope(result, sourceId);\n if (result.id !== id || result.revokedAt === null) throw new OpenPondLearningError(502, \"credential_revocation_mismatch\", \"Credential revocation did not match the requested credential.\", null);\n return result;\n }\n\n async sourceConfiguration(sourceId: string, options: LearningRequestOptions = {}) {\n const request = LearningSourceConfigurationRequestSchema.parse({ scope: this.#options.scope, sourceId });\n const result = LearningSourceConfigurationSchema.parse(await this.#request(\"source-config\", request, options));\n if (result.scope !== this.#options.scope || result.source.id !== sourceId) throw new OpenPondLearningError(502, \"source_identity_mismatch\", \"Source configuration did not match the requested source.\", null);\n return result;\n }\n\n #assertCredentialScope(value: { scope: string; sourceId: string }, sourceId: string) {\n if (value.scope !== this.#options.scope || value.sourceId !== sourceId) throw new OpenPondLearningError(502, \"credential_scope_mismatch\", \"Credential response did not match the requested source.\", null);\n }\n\n async list<K extends LearningResourceKind>(kind: K, query: Partial<LearningResourceQuery> = {}, options: LearningRequestOptions = {}): Promise<LearningResourcePage<K>> {\n const request = LearningReadRequestSchema.parse({ action: \"list\", scope: this.#options.scope, kind, ...query });\n return z.object({ items: z.array(learningResourceSchemas[kind]).max(100), nextCursor: z.string().nullable() }).strict().parse(await this.#request(\"read\", request, options)) as LearningResourcePage<K>;\n }\n\n /** Hosted publication only: stores an immutable package and attaches it, without starting training. */\n async publishBatch(input: z.infer<typeof LearningBatchPublicationSchema>, options: LearningRequestOptions = {}) {\n const request = LearningBatchPublicationSchema.parse(input);\n const result = LearningBatchPublicationResultSchema.parse(await this.#request(\"publish-batch\", { ...request, scope: this.#options.scope }, options));\n if (result.batchId !== request.batchId) throw new OpenPondLearningError(502, \"batch_identity_mismatch\", \"Published batch response did not match the requested batch.\", null);\n return result;\n }\n\n async #request(endpoint: \"commands\" | \"read\" | \"publish-batch\" | \"credentials\" | \"source-config\", body: unknown, options: LearningRequestOptions): Promise<unknown> {\n assertBoundedTaskJson(body, 16_777_216);\n const response = await (this.#options.fetch ?? globalThis.fetch)(`${this.#options.baseUrl}/v1/learning/${endpoint}`, {\n method: \"POST\", headers: { Authorization: `Bearer ${this.#options.apiKey}`, \"Content-Type\": \"application/json\", Accept: \"application/json\", \"X-OpenPond-Team-Id\": this.#options.scope }, body: JSON.stringify(body), signal: options.signal,\n redirect: \"error\",\n });\n const payload = await readBoundedLearningResponse(response);\n if (!response.ok) {\n const error = z.object({ code: z.string().optional(), error: z.string().optional() }).passthrough().safeParse(payload);\n throw new OpenPondLearningError(response.status, error.success ? error.data.code ?? \"learning_request_failed\" : \"learning_request_failed\", error.success ? error.data.error ?? `Learning request failed (${response.status}).` : `Learning request failed (${response.status}).`, payload);\n }\n return payload;\n }\n}\n\nasync function readBoundedLearningResponse(response: Response): Promise<unknown> {\n const maximumBytes = 16_777_216;\n const reader = response.body?.getReader();\n if (!reader) throw new OpenPondLearningError(response.status, \"empty_response\", \"Learning response was empty.\", null);\n const decoder = new TextDecoder();\n let bytes = 0;\n let text = \"\";\n try {\n while (true) {\n const next = await reader.read();\n if (next.done) break;\n bytes += next.value.byteLength;\n if (bytes > maximumBytes) throw new OpenPondLearningError(response.status, \"response_too_large\", \"Learning response exceeded 16 MiB; request a smaller page.\", null);\n text += decoder.decode(next.value, { stream: true });\n }\n text += decoder.decode();\n const value: unknown = JSON.parse(text);\n assertBoundedTaskJson(value, maximumBytes);\n return value;\n } finally {\n await reader.cancel();\n reader.releaseLock();\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["z", "z"]
7
+ }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ModelTasksetAuthoringSchema
3
- } from "./chunk-S7I45WJQ.js";
3
+ } from "./chunk-2U54EOXJ.js";
4
4
  import {
5
5
  ImmutableAssetRefSchema,
6
6
  contentHash,
@@ -9,7 +9,7 @@ import {
9
9
  import {
10
10
  ModelProjectVersionedRefSchema,
11
11
  canonicalJson
12
- } from "./chunk-ZNFOVV7B.js";
12
+ } from "./chunk-XANQWTTP.js";
13
13
 
14
14
  // src/model-starter-execution.ts
15
15
  import { z } from "zod";
@@ -153,13 +153,18 @@ var ModelTasksetPackageSchema = z3.object({
153
153
  rewards: z3.array(RewardReleaseSchema).min(1).max(100),
154
154
  assets: z3.array(LearningTextAssetSchema).max(1e3),
155
155
  executionResources: ModelTasksetExecutionResourcesSchema.optional(),
156
- execution: ModelStarterExecutionSchema.optional()
156
+ execution: ModelStarterExecutionSchema.optional(),
157
+ instructionMode: z3.literal("per_task").optional()
157
158
  }).strict();
158
159
  var same = (left, right) => sealLearningContent3({ value: left }).contentHash === sealLearningContent3({ value: right }).contentHash;
159
160
  var identity = (owner, root) => `model-taskset-${sealLearningContent3({ owner, root }).contentHash}`;
160
161
  function deriveModelTaskset(input) {
162
+ return compileModelTasksetReward({ ...input, source: validateModelTasksetPackage(input.source) });
163
+ }
164
+ function compileModelTasksetReward(input) {
161
165
  const owner = OwnerSchema.parse(input.owner);
162
- const source = validateModelTasksetPackage(input.source);
166
+ const source = input.source;
167
+ const edited = input.edits ?? source;
163
168
  const previous = source.taskset.metadata.modelTasksetDerivation === void 0 ? null : ModelTasksetDerivationSchema.parse(source.taskset.metadata.modelTasksetDerivation);
164
169
  if (previous && source.taskset.id !== identity(previous.owner, previous.root)) throw new Error("Derived Taskset identity differs from its ownership lineage.");
165
170
  const owned = previous && same(previous.owner, owner);
@@ -170,13 +175,13 @@ function deriveModelTaskset(input) {
170
175
  const rewards = input.rewards.map((reward) => RewardReleaseSchema.parse(reward));
171
176
  const graders = compileBoundGraders(rewardBinding, rewards);
172
177
  if (rewardBinding.recipeRef) throw new Error("Resolve the Reward recipe into one standalone binding before deriving a Taskset.");
173
- const policy = { ...source.taskset.policy, hiddenGraderRefs: graders.filter((grader) => grader.privileged).map((grader) => grader.id) };
174
- const previousResources = source.executionResources ?? source.execution;
178
+ const policy = { ...edited.taskset.policy, hiddenGraderRefs: graders.filter((grader) => grader.privileged).map((grader) => grader.id) };
179
+ const previousResources = edited.executionResources ?? edited.execution;
175
180
  const environment = previousResources?.environment ?? createEnvironmentRelease({
176
181
  schemaVersion: "openpond.environmentRelease.v1",
177
182
  id: `${id}-environment`,
178
183
  revision: 1,
179
- contract: source.taskset.environment,
184
+ contract: edited.taskset.environment,
180
185
  actionSchemaRef: null,
181
186
  observationSchemaRef: null,
182
187
  stateSchemaRef: null,
@@ -189,17 +194,17 @@ function deriveModelTaskset(input) {
189
194
  id: `${id}-verifiers`,
190
195
  revision,
191
196
  graders,
192
- isolation: previousResources?.verifierSet.isolation ?? { processBoundary: "isolated_process", networkPolicy: "none", defaultTimeoutMs: Math.min(source.taskset.environment.defaultTimeoutMs, 3e5) },
197
+ isolation: previousResources?.verifierSet.isolation ?? { processBoundary: "isolated_process", networkPolicy: "none", defaultTimeoutMs: Math.min(edited.taskset.environment.defaultTimeoutMs, 3e5) },
193
198
  calibrationReceiptRefs: [],
194
199
  metadata: previousResources ? { sourceVerifierSet: learningRef2(previousResources.verifierSet) } : {}
195
200
  });
196
201
  const executionResources = { environment, verifierSet };
197
- const execution = source.execution ? { ...source.execution, verifierSet } : void 0;
198
- const { contentHash: _taskHash, ...taskContent } = source.taskset;
199
- const { contentHash: _definitionHash, ...definitionContent } = source.taskDefinition;
202
+ const execution = edited.execution ? { ...edited.execution, verifierSet } : void 0;
203
+ const { contentHash: _taskHash, ...taskContent } = edited.taskset;
204
+ const { contentHash: _definitionHash, ...definitionContent } = edited.taskDefinition;
200
205
  const taskExecution = { ...definitionContent.execution, policy, environmentRelease: { id: environment.id, contentHash: environment.contentHash }, verifierSetRelease: { id: verifierSet.id, contentHash: verifierSet.contentHash } };
201
206
  const taskDefinition = TaskDefinitionSchema.parse(sealLearningContent3({ ...definitionContent, id: `${id}-definition`, revision, rewardBinding: learningRef2(rewardBinding), execution: taskExecution }));
202
- const authoring = source.taskset.metadata.starterAuthoring;
207
+ const authoring = source.taskset.metadata.starterAuthoring ?? source.taskset.metadata.ordinaryAuthoring;
203
208
  const graderFixtures = authoring && typeof authoring === "object" && !Array.isArray(authoring) && "graderFixtures" in authoring ? authoring.graderFixtures : void 0;
204
209
  const taskset = TasksetReleaseSchema.parse(sealLearningContent3({
205
210
  ...taskContent,
@@ -211,10 +216,11 @@ function deriveModelTaskset(input) {
211
216
  starter: { taskDefinition: learningRef2(taskDefinition), rewardBinding: learningRef2(rewardBinding) },
212
217
  rewardExecution: { binding: rewardBinding, rewards },
213
218
  ...graderFixtures === void 0 ? {} : { starterAuthoring: { graderFixtures } },
219
+ ...edited.taskset.metadata.environmentResources === void 0 ? {} : { environmentResources: edited.taskset.metadata.environmentResources },
214
220
  modelTasksetDerivation: { schemaVersion: "openpond.modelTasksetDerivation.v1", owner, root, parent: learningRef2(source.taskset) }
215
221
  }
216
222
  }));
217
- return validateModelTasksetPackage({ taskset, taskDefinition, rewardBinding, rewards, assets: input.assets, executionResources, ...execution ? { execution } : {} });
223
+ return validateModelTasksetPackage({ taskset, taskDefinition, rewardBinding, rewards, assets: input.assets, executionResources, ...execution ? { execution } : {}, ...source.instructionMode ? { instructionMode: source.instructionMode } : {} });
218
224
  }
219
225
  function validateModelTasksetPackage(value) {
220
226
  const result = ModelTasksetPackageSchema.parse(value);
@@ -246,7 +252,7 @@ function validateModelTasksetPackage(value) {
246
252
  }
247
253
  for (const task of taskset.tasks) {
248
254
  if (taskDefinition.requiredOutputs && !same(task.requiredOutputs, taskDefinition.requiredOutputs)) throw new Error(`Taskset outputs differ from its reviewed definition: ${task.id}.`);
249
- if (task.policyVisibleContext.instructions !== taskDefinition.instructions || !validateTaskValue(taskDefinition.inputSchema, task.input).valid || task.expectedOutput !== null && !validateTaskValue(taskDefinition.outputSchema, task.expectedOutput).valid) throw new Error(`Taskset task differs from its declared format: ${task.id}.`);
255
+ if (result.instructionMode !== "per_task" && task.policyVisibleContext.instructions !== taskDefinition.instructions || !validateTaskValue(taskDefinition.inputSchema, task.input).valid || task.expectedOutput !== null && !validateTaskValue(taskDefinition.outputSchema, task.expectedOutput).valid) throw new Error(`Taskset task differs from its declared format: ${task.id}.`);
250
256
  if (task.privilegedContextRef && !assets.some((asset) => asset.id === task.privilegedContextRef && asset.asset.visibility === "host_private")) throw new Error(`Taskset private context is missing: ${task.id}.`);
251
257
  }
252
258
  for (const reward of rewards) {
@@ -546,6 +552,7 @@ export {
546
552
  ModelTasksetDerivationSchema,
547
553
  ModelTasksetPackageSchema,
548
554
  deriveModelTaskset,
555
+ compileModelTasksetReward,
549
556
  validateModelTasksetPackage,
550
557
  TasksetPackageLearningResourcesSchema,
551
558
  learningPackageContextFiles,
@@ -564,4 +571,4 @@ export {
564
571
  validateTasksetPackage,
565
572
  createTasksetPackage
566
573
  };
567
- //# sourceMappingURL=chunk-IDLMILN4.js.map
574
+ //# sourceMappingURL=chunk-T5JMZVQR.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/model-starter-execution.ts", "../src/model-taskset-resources.ts", "../src/model-taskset-derivation.ts", "../src/taskset-package-learning.ts", "../src/taskset-package-files.ts", "../src/taskset-package-execution.ts", "../src/taskset-package-contracts.ts", "../src/model-taskset-authoring-lineage.ts"],
4
+ "sourcesContent": ["import { z } from \"zod\";\nimport { EnvironmentReleaseSchema, VerifierSetReleaseSchema } from \"@openpond/evals\";\nimport { JavaScriptEnvironmentDefinitionSchema, assertJavaScriptEnvironmentDefinition } from \"@openpond/evals/javascript-environment\";\nimport { createLearningTextAsset, learningRef, sealLearningContent, verifyLearningTextAsset, type LearningTextAsset } from \"@openpond/evals/learning\";\nimport { assertBoundedTaskJson } from \"@openpond/evals/task-schema\";\nimport type { TasksetRelease } from \"@openpond/evals/tasksets\";\nimport { canonicalJson } from \"./protocol.js\";\nimport { ModelProjectVersionedRefSchema } from \"./model-projects.js\";\n\nconst HashSchema = z.string().regex(/^[a-f0-9]{64}$/);\nexport const ModelStarterEnvironmentAttemptSchema = /* @__PURE__ */ (() => z.object({\n schemaVersion: z.literal(\"openpond.javascriptEnvironmentAttempt.v1\"), taskId: z.string(),\n status: z.enum([\"completed\", \"budget_exhausted\", \"cancelled\", \"timed_out\", \"policy_failure\", \"environment_failure\"]),\n output: z.string().nullable(), collected: z.boolean(), environmentCleanupComplete: z.boolean(),\n snapshot: z.object({ definition: ModelProjectVersionedRefSchema, inputHash: HashSchema, seed: z.number().int(), initialStateHash: HashSchema, finalStateHash: HashSchema, state: z.record(z.string(), z.unknown()), events: z.array(z.record(z.string(), z.unknown())) }).strict().nullable(),\n messages: z.array(z.unknown()), error: z.string().nullable(), contentHash: HashSchema,\n}).strict())();\n\n/** Validate an owner-recorded runtime artifact against the admitted task.\n * Provenance/ownership of the artifact remains the execution host's concern. */\nexport function verifyModelStarterEnvironmentAttempt(value: unknown, context: { taskId: string; input: Record<string, unknown>; seed: number; javascript: z.infer<typeof ModelProjectVersionedRefSchema> }) {\n assertBoundedTaskJson(value, 16_777_216);\n const result = ModelStarterEnvironmentAttemptSchema.parse(value);\n const { contentHash, ...content } = result;\n if (sealLearningContent(content).contentHash !== contentHash || result.taskId !== context.taskId || (result.snapshot && (\n !equal(result.snapshot.definition, context.javascript) || result.snapshot.inputHash !== sealLearningContent(context.input).contentHash || result.snapshot.seed !== context.seed || result.snapshot.finalStateHash !== sealLearningContent(result.snapshot.state).contentHash\n ))) throw new Error(\"Starter environment attempt differs from its admitted task or recorded bytes.\");\n return result;\n}\n\nexport const ModelStarterExecutionSchema = z.object({\n environment: EnvironmentReleaseSchema,\n verifierSet: VerifierSetReleaseSchema,\n javascript: JavaScriptEnvironmentDefinitionSchema,\n}).strict();\nexport type ModelStarterExecution = z.infer<typeof ModelStarterExecutionSchema>;\nexport const ModelStarterToolFixtureScriptSchema = z.object({\n actions: z.array(z.object({ name: z.string().min(1).max(64), arguments: z.record(z.string(), z.unknown()) }).strict()).max(1_000),\n}).strict();\nexport type ModelStarterExecutionContext = Pick<TasksetRelease, \"environment\" | \"environmentRelease\" | \"verifierSetRelease\" | \"tools\" | \"capabilities\" | \"policy\" | \"graders\" | \"tasks\">;\n\n/** Derivable from immutable Taskset refs, without putting private code in its metadata. */\nexport function modelStarterExecutionAssetId(context: Pick<ModelStarterExecutionContext, \"environmentRelease\" | \"verifierSetRelease\">): string {\n if (!context.environmentRelease || !context.verifierSetRelease) throw new Error(\"Starter execution release references are missing.\");\n return `starter-execution-${sealLearningContent({ environment: context.environmentRelease, verifiers: context.verifierSetRelease }).contentHash}`;\n}\n\n/** Persist alongside the package's private assets in the same creation transaction.\n * The existing authored-text resource bound also applies to this small closure. */\nexport function createModelStarterExecutionAsset(value: ModelStarterExecution): LearningTextAsset {\n const execution = ModelStarterExecutionSchema.parse(value);\n assertExecutionIntegrity(execution);\n const id = modelStarterExecutionAssetId({ environmentRelease: { id: execution.environment.id, contentHash: execution.environment.contentHash }, verifierSetRelease: { id: execution.verifierSet.id, contentHash: execution.verifierSet.contentHash } });\n const generated = createLearningTextAsset({ text: canonicalJson(execution), path: \"environment/execution.json\", mediaType: \"application/json\", visibility: \"host_private\" });\n const { contentHash: _hash, ...content } = generated;\n return sealLearningContent({ ...content, id, asset: { ...content.asset, id } });\n}\n\n/** The caller owns and verifies the Taskset manifest; this verifies its private\n * resource graph. Passing selected immutable task rows permits bounded hydration. */\nexport function resolveModelStarterExecutionAsset(context: ModelStarterExecutionContext, asset: LearningTextAsset, assets: LearningTextAsset[]): ModelStarterExecution {\n if (asset.id !== modelStarterExecutionAssetId(context) || asset.asset.visibility !== \"host_private\" || asset.asset.mediaType !== \"application/json\") throw new Error(\"Starter execution asset differs from its Taskset references.\");\n const execution = ModelStarterExecutionSchema.parse(JSON.parse(verifyLearningTextAsset(asset, asset.asset)));\n validateModelStarterExecution(execution, context, assets);\n return execution;\n}\n\nfunction equal(left: unknown, right: unknown): boolean {\n return sealLearningContent({ value: left }).contentHash === sealLearningContent({ value: right }).contentHash;\n}\n\nfunction assertExecutionIntegrity(execution: ModelStarterExecution): void {\n assertJavaScriptEnvironmentDefinition(execution.javascript);\n for (const resource of [execution.environment, execution.verifierSet]) {\n const { contentHash, ...content } = resource;\n if (sealLearningContent(content).contentHash !== contentHash) throw new Error(`Starter execution resource integrity failed: ${resource.id}.`);\n }\n if (!equal(execution.environment.metadata.javascriptEnvironment, learningRef(execution.javascript))) throw new Error(\"Starter execution resources differ from its declared task context.\");\n}\n\n/** Close executable dependencies before a host persists or runs a package. */\nexport function validateModelStarterExecution(\n execution: ModelStarterExecution | undefined,\n taskset: ModelStarterExecutionContext,\n assets: LearningTextAsset[],\n): void {\n if (!execution) {\n if (taskset.environment.entrypoint === \"openpond.javascript-environment.v1\") throw new Error(\"Starter JavaScript execution resources are missing.\");\n return;\n }\n const { environment, verifierSet, javascript } = execution;\n assertExecutionIntegrity(execution);\n if (!equal(taskset.environmentRelease, { id: environment.id, contentHash: environment.contentHash }) ||\n !equal(taskset.verifierSetRelease, { id: verifierSet.id, contentHash: verifierSet.contentHash }) ||\n !equal(environment.contract, taskset.environment) || !equal(verifierSet.graders, taskset.graders) ||\n !equal(taskset.tools, javascript.tools) || !equal(environment.metadata.javascriptEnvironment, learningRef(javascript))) {\n throw new Error(\"Starter execution resources differ from its declared task context.\");\n }\n const contract = environment.contract;\n if (contract.entrypoint !== \"openpond.javascript-environment.v1\" || contract.kind !== \"agent\" ||\n !contract.stateful || !contract.deterministicSeeds || contract.networkPolicy !== \"none\" ||\n new Set(contract.lifecycle).size !== 5 || taskset.capabilities.length || taskset.policy.connectedAppScopes.length) {\n throw new Error(\"Starter JavaScript environment declares unsupported host capabilities.\");\n }\n for (const reference of [javascript.module, environment.actionSchemaRef, environment.observationSchemaRef, environment.stateSchemaRef]) {\n if (!reference) continue;\n const asset = assets.find(asset => asset.id === reference.id);\n if (!asset) throw new Error(`Starter environment asset is missing: ${reference.id}.`);\n verifyLearningTextAsset(asset, reference);\n }\n for (const task of taskset.tasks) {\n const asset = assets.find(asset => asset.id === task.privilegedContextRef);\n if (!asset || asset.asset.visibility !== \"host_private\" || asset.asset.mediaType !== \"application/json\") {\n throw new Error(`Starter private initial state is missing: ${task.id}.`);\n }\n const state: unknown = JSON.parse(verifyLearningTextAsset(asset, asset.asset));\n if (!state || typeof state !== \"object\" || Array.isArray(state)) throw new Error(`Starter initial state must be a JSON object: ${task.id}.`);\n assertBoundedTaskJson(state, javascript.maxStateBytes);\n }\n}\n", "import { z } from \"zod\";\nimport { EnvironmentReleaseSchema, VerifierSetReleaseSchema, verifyEnvironmentRelease, verifyVerifierSetRelease } from \"@openpond/evals\";\nimport { createLearningTextAsset, sealLearningContent, verifyLearningTextAsset, type LearningTextAsset } from \"@openpond/evals/learning\";\nimport type { TasksetRelease } from \"@openpond/evals/tasksets\";\nimport { canonicalJson } from \"./protocol.js\";\n\nexport const ModelTasksetExecutionResourcesSchema = z.object({ environment: EnvironmentReleaseSchema, verifierSet: VerifierSetReleaseSchema }).strict();\ntype Resources = z.infer<typeof ModelTasksetExecutionResourcesSchema>;\ntype Context = Pick<TasksetRelease, \"environmentRelease\" | \"verifierSetRelease\" | \"environment\" | \"graders\">;\n\n/** Private resource identity follows the exact published execution references. */\nexport function modelTasksetExecutionResourcesAssetId(context: Pick<Context, \"environmentRelease\" | \"verifierSetRelease\">): string {\n if (!context.environmentRelease || !context.verifierSetRelease) throw new Error(\"Taskset execution references are missing.\");\n return `taskset-execution-${sealLearningContent({ environment: context.environmentRelease, verifiers: context.verifierSetRelease }).contentHash}`;\n}\n\nexport function createModelTasksetExecutionResourcesAsset(value: Resources): LearningTextAsset {\n const resources = ModelTasksetExecutionResourcesSchema.parse({ environment: value.environment, verifierSet: value.verifierSet });\n assertIntegrity(resources);\n const id = modelTasksetExecutionResourcesAssetId({ environmentRelease: { id: resources.environment.id, contentHash: resources.environment.contentHash }, verifierSetRelease: { id: resources.verifierSet.id, contentHash: resources.verifierSet.contentHash } });\n const { contentHash: _hash, ...asset } = createLearningTextAsset({ text: canonicalJson(resources), path: \"environment/resources.json\", mediaType: \"application/json\", visibility: \"host_private\" });\n return sealLearningContent({ ...asset, id, asset: { ...asset.asset, id } });\n}\n\n/** Resolve text or tool execution resources without trusting an asset's ID alone. */\nexport function resolveModelTasksetExecutionResourcesAsset(context: Context, asset: LearningTextAsset): Resources {\n if (asset.id !== modelTasksetExecutionResourcesAssetId(context) || asset.asset.visibility !== \"host_private\" || asset.asset.mediaType !== \"application/json\") throw new Error(\"Taskset execution asset differs from its published references.\");\n const resources = ModelTasksetExecutionResourcesSchema.parse(JSON.parse(verifyLearningTextAsset(asset, asset.asset)));\n assertIntegrity(resources);\n if (asset.id !== createModelTasksetExecutionResourcesAsset(resources).id || canonicalJson(context.environment) !== canonicalJson(resources.environment.contract) || canonicalJson(context.graders) !== canonicalJson(resources.verifierSet.graders)) throw new Error(\"Taskset differs from its execution resources.\");\n return resources;\n}\n\nfunction assertIntegrity(resources: Resources): void {\n if (!verifyEnvironmentRelease(resources.environment) || !verifyVerifierSetRelease(resources.verifierSet)) throw new Error(\"Taskset execution resource integrity failed.\");\n}\n", "import { z } from \"zod\";\nimport { createEnvironmentRelease, createVerifierSetRelease, verifyEnvironmentRelease, verifyVerifierSetRelease } from \"@openpond/evals\";\nimport { LearningTextAssetSchema, TaskDefinitionSchema, assertLearningContentHash, learningRef, sameLearningRef, sealLearningContent, verifyLearningTextAsset } from \"@openpond/evals/learning\";\nimport { RewardBindingSchema, RewardReleaseSchema, compileBoundGraders } from \"@openpond/evals/rewards\";\nimport { TasksetReleaseSchema, assertTasksetRelease } from \"@openpond/evals/tasksets\";\nimport { validateTaskValue } from \"@openpond/evals/task-schema\";\n\nimport { ModelProjectVersionedRefSchema } from \"./model-projects.js\";\nimport { ModelStarterExecutionSchema, validateModelStarterExecution } from \"./model-starter-execution.js\";\nimport { ModelTasksetExecutionResourcesSchema } from \"./model-taskset-resources.js\";\n\nconst OwnerSchema = z.object({ scopeId: z.string().trim().min(1).max(500), modelId: z.string().trim().min(1).max(500) }).strict();\nexport const ModelTasksetDerivationSchema = z.object({\n schemaVersion: z.literal(\"openpond.modelTasksetDerivation.v1\"),\n owner: OwnerSchema,\n root: ModelProjectVersionedRefSchema,\n parent: ModelProjectVersionedRefSchema,\n}).strict();\n\n/** Immutable executable resources, independent of a catalog listing. */\nexport const ModelTasksetPackageSchema = z.object({\n taskset: TasksetReleaseSchema,\n taskDefinition: TaskDefinitionSchema,\n rewardBinding: RewardBindingSchema,\n rewards: z.array(RewardReleaseSchema).min(1).max(100),\n assets: z.array(LearningTextAssetSchema).max(1_000),\n executionResources: ModelTasksetExecutionResourcesSchema.optional(),\n execution: ModelStarterExecutionSchema.optional(),\n instructionMode: z.literal(\"per_task\").optional(),\n}).strict();\nexport type ModelTasksetPackage = z.infer<typeof ModelTasksetPackageSchema>;\n\nconst same = (left: unknown, right: unknown) => sealLearningContent({ value: left }).contentHash === sealLearningContent({ value: right }).contentHash;\nconst identity = (owner: z.infer<typeof OwnerSchema>, root: z.infer<typeof ModelProjectVersionedRefSchema>) => `model-taskset-${sealLearningContent({ owner, root }).contentHash}`;\n\n/** Hosts authorize the source and owner, upload immutable files, then commit\n * this result together with the model CAS and operation receipt. This pure\n * compiler neither allocates a new identity on retry nor changes a consumer. */\nexport function deriveModelTaskset(input: {\n owner: z.input<typeof OwnerSchema>;\n source: ModelTasksetPackage;\n rewardBinding: z.infer<typeof RewardBindingSchema>;\n rewards: z.infer<typeof RewardReleaseSchema>[];\n assets: z.infer<typeof LearningTextAssetSchema>[];\n}): ModelTasksetPackage {\n return compileModelTasksetReward({ ...input, source: validateModelTasksetPackage(input.source) });\n}\n\n/** Internal compiler shared by validated bound and ordinary source admission.\n * The source Taskset is always the real parent, never a synthetic bound copy. */\nexport function compileModelTasksetReward(input: {\n owner: z.input<typeof OwnerSchema>;\n source: Pick<ModelTasksetPackage, \"taskset\" | \"taskDefinition\" | \"executionResources\" | \"execution\" | \"instructionMode\">;\n rewardBinding: z.infer<typeof RewardBindingSchema>;\n rewards: z.infer<typeof RewardReleaseSchema>[];\n assets: z.infer<typeof LearningTextAssetSchema>[];\n edits?: Pick<ModelTasksetPackage, \"taskset\" | \"taskDefinition\" | \"executionResources\" | \"execution\">;\n}): ModelTasksetPackage {\n const owner = OwnerSchema.parse(input.owner);\n const source = input.source;\n const edited = input.edits ?? source;\n const previous = source.taskset.metadata.modelTasksetDerivation === undefined ? null : ModelTasksetDerivationSchema.parse(source.taskset.metadata.modelTasksetDerivation);\n if (previous && source.taskset.id !== identity(previous.owner, previous.root)) throw new Error(\"Derived Taskset identity differs from its ownership lineage.\");\n const owned = previous && same(previous.owner, owner);\n const root = owned ? previous.root : learningRef(source.taskset);\n const id = owned ? source.taskset.id : identity(owner, root);\n const revision = owned ? source.taskset.revision + 1 : 1;\n const rewardBinding = RewardBindingSchema.parse(input.rewardBinding);\n const rewards = input.rewards.map(reward => RewardReleaseSchema.parse(reward));\n const graders = compileBoundGraders(rewardBinding, rewards);\n if (rewardBinding.recipeRef) throw new Error(\"Resolve the Reward recipe into one standalone binding before deriving a Taskset.\");\n const policy = { ...edited.taskset.policy, hiddenGraderRefs: graders.filter(grader => grader.privileged).map(grader => grader.id) };\n const previousResources = edited.executionResources ?? edited.execution;\n const environment = previousResources?.environment ?? createEnvironmentRelease({\n schemaVersion: \"openpond.environmentRelease.v1\", id: `${id}-environment`, revision: 1,\n contract: edited.taskset.environment, actionSchemaRef: null, observationSchemaRef: null, stateSchemaRef: null,\n artifactCollection: { maxArtifacts: 100_000, maxTotalBytes: 250_000_000 }, adapterConformanceHashes: {}, metadata: {},\n });\n const verifierSet = createVerifierSetRelease({\n schemaVersion: \"openpond.verifierSetRelease.v1\", id: `${id}-verifiers`, revision, graders,\n isolation: previousResources?.verifierSet.isolation ?? { processBoundary: \"isolated_process\", networkPolicy: \"none\", defaultTimeoutMs: Math.min(edited.taskset.environment.defaultTimeoutMs, 300_000) },\n calibrationReceiptRefs: [], metadata: previousResources ? { sourceVerifierSet: learningRef(previousResources.verifierSet) } : {},\n });\n const executionResources = { environment, verifierSet };\n const execution = edited.execution ? { ...edited.execution, verifierSet } : undefined;\n const { contentHash: _taskHash, ...taskContent } = edited.taskset;\n const { contentHash: _definitionHash, ...definitionContent } = edited.taskDefinition;\n const taskExecution = { ...definitionContent.execution, policy, environmentRelease: { id: environment.id, contentHash: environment.contentHash }, verifierSetRelease: { id: verifierSet.id, contentHash: verifierSet.contentHash } };\n const taskDefinition = TaskDefinitionSchema.parse(sealLearningContent({ ...definitionContent, id: `${id}-definition`, revision, rewardBinding: learningRef(rewardBinding), execution: taskExecution }));\n const authoring = source.taskset.metadata.starterAuthoring ?? source.taskset.metadata.ordinaryAuthoring;\n const graderFixtures = authoring && typeof authoring === \"object\" && !Array.isArray(authoring) && \"graderFixtures\" in authoring ? authoring.graderFixtures : undefined;\n // Keep provenance through exact lineage. Source package qualifications and\n // privacy attestations describe different bytes and must not be copied.\n const taskset = TasksetReleaseSchema.parse(sealLearningContent({\n ...taskContent, ...taskExecution, id, revision, graders,\n metadata: {\n starter: { taskDefinition: learningRef(taskDefinition), rewardBinding: learningRef(rewardBinding) },\n rewardExecution: { binding: rewardBinding, rewards },\n ...(graderFixtures === undefined ? {} : { starterAuthoring: { graderFixtures } }),\n ...(edited.taskset.metadata.environmentResources === undefined ? {} : { environmentResources: edited.taskset.metadata.environmentResources }),\n modelTasksetDerivation: { schemaVersion: \"openpond.modelTasksetDerivation.v1\", owner, root, parent: learningRef(source.taskset) },\n },\n }));\n return validateModelTasksetPackage({ taskset, taskDefinition, rewardBinding, rewards, assets: input.assets, executionResources, ...(execution ? { execution } : {}), ...(source.instructionMode ? { instructionMode: source.instructionMode } : {}) });\n}\n\nexport function validateModelTasksetPackage(value: unknown): ModelTasksetPackage {\n const result = ModelTasksetPackageSchema.parse(value);\n const { taskset, taskDefinition, rewardBinding, rewards, assets, execution } = result;\n for (const resource of [taskset, taskDefinition, rewardBinding, ...rewards, ...assets]) assertLearningContentHash(resource);\n assertTasksetRelease(taskset);\n if (rewardBinding.recipeRef) throw new Error(\"Resolve the Reward recipe into one standalone binding before deriving a Taskset.\");\n if (!sameLearningRef(taskDefinition.rewardBinding, learningRef(rewardBinding))) throw new Error(\"Taskset definition differs from its Reward binding.\");\n const { policy, environment, environmentRelease, tools, capabilities, verifierSetRelease } = taskset;\n if (!same(taskDefinition.execution, { policy, environment, ...(environmentRelease ? { environmentRelease } : {}), tools, capabilities, ...(verifierSetRelease ? { verifierSetRelease } : {}) })) throw new Error(\"Taskset definition differs from its execution resources.\");\n if (!same(taskset.graders, compileBoundGraders(rewardBinding, rewards))) throw new Error(\"Taskset graders differ from its Reward binding.\");\n if (taskset.metadata.starter !== undefined) {\n const metadata = z.object({ taskDefinition: ModelProjectVersionedRefSchema, rewardBinding: ModelProjectVersionedRefSchema }).passthrough().parse(taskset.metadata.starter);\n if (!sameLearningRef(metadata.taskDefinition, learningRef(taskDefinition)) || !sameLearningRef(metadata.rewardBinding, learningRef(rewardBinding))) throw new Error(\"Taskset metadata differs from its immutable grading resources.\");\n }\n if (taskset.metadata.rewardExecution !== undefined && !same(taskset.metadata.rewardExecution, { binding: rewardBinding, rewards })) throw new Error(\"Taskset embedded Rewards differ from its immutable grading resources.\");\n if (taskset.metadata.rewardBinding !== undefined && !sameLearningRef(ModelProjectVersionedRefSchema.parse(taskset.metadata.rewardBinding), learningRef(rewardBinding))) throw new Error(\"Taskset Reward reference differs from its immutable grading resources.\");\n const resources = result.executionResources ?? execution;\n if (taskset.environmentRelease && !resources) throw new Error(\"Deriving a Taskset requires its pinned execution resources.\");\n if (resources && (!verifyEnvironmentRelease(resources.environment) || !verifyVerifierSetRelease(resources.verifierSet) ||\n !same(taskset.environmentRelease, { id: resources.environment.id, contentHash: resources.environment.contentHash }) ||\n !same(taskset.verifierSetRelease, { id: resources.verifierSet.id, contentHash: resources.verifierSet.contentHash }) ||\n !same(taskset.environment, resources.environment.contract) || !same(taskset.graders, resources.verifierSet.graders))) throw new Error(\"Taskset differs from its pinned execution resources.\");\n validateModelStarterExecution(execution, taskset, assets);\n if (new Set(assets.map(asset => asset.id)).size !== assets.length) throw new Error(\"Taskset asset identities must be unique.\");\n for (const asset of assets) verifyLearningTextAsset(asset, asset.asset);\n for (const reference of resources ? [resources.environment.actionSchemaRef, resources.environment.observationSchemaRef, resources.environment.stateSchemaRef] : []) {\n if (!reference) continue;\n const asset = assets.find(asset => asset.id === reference.id);\n if (!asset) throw new Error(`Taskset environment asset is missing: ${reference.id}.`);\n verifyLearningTextAsset(asset, reference);\n }\n for (const task of taskset.tasks) {\n if (taskDefinition.requiredOutputs && !same(task.requiredOutputs, taskDefinition.requiredOutputs)) throw new Error(`Taskset outputs differ from its reviewed definition: ${task.id}.`);\n if ((result.instructionMode !== \"per_task\" && task.policyVisibleContext.instructions !== taskDefinition.instructions) || !validateTaskValue(taskDefinition.inputSchema, task.input).valid ||\n (task.expectedOutput !== null && !validateTaskValue(taskDefinition.outputSchema, task.expectedOutput).valid)) throw new Error(`Taskset task differs from its declared format: ${task.id}.`);\n if (task.privilegedContextRef && !assets.some(asset => asset.id === task.privilegedContextRef && asset.asset.visibility === \"host_private\")) throw new Error(`Taskset private context is missing: ${task.id}.`);\n }\n for (const reward of rewards) {\n const implementation = reward.implementation;\n const references = [...reward.assets, ...(\"verifierRef\" in implementation ? [implementation.verifierRef] : []), ...(\"rubricRef\" in implementation ? [implementation.rubricRef] : []), ...(\"inputContract\" in implementation ? [implementation.inputContract] : [])];\n for (const reference of references) {\n const asset = assets.find(asset => asset.id === reference.id);\n if (!asset || reference.visibility === \"policy\") throw new Error(`Taskset Reward requires its private asset: ${reference.id}.`);\n verifyLearningTextAsset(asset, reference);\n }\n }\n return result;\n}\n", "import { z } from \"zod\";\nimport { contentHash, sha256 } from \"@openpond/harness\";\nimport { TaskBatchSchema, TaskEvidenceSchema, TaskAdmissionDecisionSchema, LearningSourceSchema, LearningTextAssetSchema,\n assertLearningContentHash, compileTaskBatch, learningRef, sameLearningRef, taskBatchPackageMetadata, verifyLearningTextAsset } from \"@openpond/evals/learning\";\nimport type { TasksetRelease } from \"@openpond/evals/tasksets\";\nimport { canonicalJson } from \"./training.js\";\n\n/** Review snapshots travel with their exact batch; importing them is not a\n * new local admission or permission to train. */\nexport const TasksetPackageLearningResourcesSchema = z.object({\n batch: TaskBatchSchema,\n evidence: z.array(TaskEvidenceSchema).min(1).max(10_000),\n decisions: z.array(TaskAdmissionDecisionSchema).min(1).max(10_000),\n sources: z.array(LearningSourceSchema).min(1).max(10_000),\n assets: z.array(LearningTextAssetSchema).max(1_000),\n}).strict();\nexport type TasksetPackageLearningResources = z.infer<typeof TasksetPackageLearningResourcesSchema>;\n\nexport function learningPackageContextFiles(resources: TasksetPackageLearningResources) {\n return resources.evidence.filter(evidence => evidence.submission.evaluatorContext !== null).map(evidence => {\n const text = canonicalJson(evidence.submission.evaluatorContext);\n const bytes = new TextEncoder().encode(text);\n return { asset: { id: `task-evidence:${evidence.contentHash}`, path: `learning/context/${evidence.contentHash}.json`,\n contentHash: sha256(bytes), sizeBytes: bytes.byteLength, mediaType: \"application/json\", visibility: \"host_private\" as const },\n base64: btoa(Array.from(bytes, byte => String.fromCharCode(byte)).join(\"\")) };\n });\n}\n\nexport function validateTasksetLearningResources(taskset: TasksetRelease, input: unknown) {\n const resources = TasksetPackageLearningResourcesSchema.parse(input);\n const metadata = taskBatchPackageMetadata(taskset);\n if (!sameLearningRef(learningRef(resources.batch), metadata.batch)) throw new Error(\"Taskset learning batch differs from its admission metadata.\");\n for (const collection of [resources.evidence, resources.decisions, resources.sources, resources.assets]) {\n const identities = new Set<string>();\n for (const resource of collection) {\n assertLearningContentHash(resource);\n const key = `${resource.id}:${resource.revision}`;\n if (identities.has(key)) throw new Error(\"Taskset learning resource identities must be unique.\");\n identities.add(key);\n }\n }\n if (resources.evidence.length !== resources.batch.examples.length || resources.decisions.length !== resources.batch.examples.length) throw new Error(\"Taskset learning snapshots must match the admitted batch inventory.\");\n for (const evidence of resources.evidence) {\n const source = resources.sources.find(source => sameLearningRef(learningRef(source), evidence.source));\n if (!source || !sameLearningRef(source.taskDefinition, learningRef(metadata.definition))) throw new Error(\"Taskset evidence source differs from its task definition.\");\n }\n if (resources.sources.some(source => !resources.evidence.some(evidence => sameLearningRef(evidence.source, learningRef(source))))) throw new Error(\"Taskset package includes an unrelated learning source.\");\n const rewardAssets = metadata.rewards.flatMap(reward => [...reward.assets,\n ...(reward.implementation.kind === \"custom_verifier\" ? [reward.implementation.verifierRef]\n : reward.implementation.kind === \"model_judge\" || reward.implementation.kind === \"human\" ? [reward.implementation.rubricRef] : []),\n ...(\"inputContract\" in reward.implementation ? [reward.implementation.inputContract] : []),\n ]);\n for (const ref of rewardAssets) {\n const asset = resources.assets.find(asset => asset.id === ref.id);\n if (!asset) throw new Error(\"Taskset learning Reward asset is missing.\");\n verifyLearningTextAsset(asset, ref);\n }\n if (resources.assets.some(asset => !rewardAssets.some(ref => ref.id === asset.id))) throw new Error(\"Taskset package includes an unrelated learning asset.\");\n const compiled = compileTaskBatch({ batch: resources.batch, definition: metadata.definition, binding: metadata.binding,\n rewards: metadata.rewards, evidence: resources.evidence, decisions: resources.decisions });\n const compiledMetadata = taskBatchPackageMetadata(compiled);\n if (contentHash(compiledMetadata) !== contentHash(metadata)) throw new Error(\"Taskset admission metadata differs from its reviewed snapshots.\");\n const execution = (release: TasksetRelease) => ({ policy: release.policy, environment: release.environment, tools: release.tools });\n if (contentHash(execution(compiled)) !== contentHash(execution(taskset))) throw new Error(\"Taskset execution differs from its reviewed task definition.\");\n const taskContent = (task: TasksetRelease[\"tasks\"][number]) => ({ id: task.id, clusterKey: task.clusterKey, split: task.split,\n input: task.input, expectedOutput: task.expectedOutput, policyVisibleContext: task.policyVisibleContext,\n privilegedContextRef: task.privilegedContextRef, artifactRefs: task.artifactRefs, requiredOutputs: task.requiredOutputs ?? [], tags: task.tags });\n if (contentHash(compiled.tasks.map(taskContent)) !== contentHash(taskset.tasks.map(taskContent))) throw new Error(\"Taskset rows differ from their reviewed evidence.\");\n return resources;\n}\n", "import { z } from \"zod\";\nimport { ImmutableAssetRefSchema, sha256 } from \"@openpond/harness\";\n\n/** The limit covers the entire decoded JSON envelope, including base64. */\nexport const MAX_TASKSET_PACKAGE_BYTES = 64 * 1024 * 1024;\nexport const TasksetPackageFileSchema = z.object({\n asset: ImmutableAssetRefSchema,\n base64: z.string().max(Math.ceil(MAX_TASKSET_PACKAGE_BYTES / 3) * 4),\n}).strict();\nexport type TasksetPackageFile = z.infer<typeof TasksetPackageFileSchema>;\n\nexport function decodeTasksetPackageFile(value: TasksetPackageFile): Uint8Array {\n const file = TasksetPackageFileSchema.parse(value);\n const raw = atob(file.base64);\n if (btoa(raw) !== file.base64) throw new Error(`Taskset asset ${file.asset.id} has noncanonical base64.`);\n const bytes = Uint8Array.from(raw, character => character.charCodeAt(0));\n if (bytes.byteLength !== file.asset.sizeBytes || sha256(bytes) !== file.asset.contentHash) throw new Error(`Taskset asset ${file.asset.id} differs from its immutable bytes.`);\n return bytes;\n}\n", "import type { TasksetRelease } from \"@openpond/evals/tasksets\";\nimport { LearningTextAssetSchema, sealLearningContent, type LearningTextAsset } from \"@openpond/evals/learning\";\nimport { createModelStarterExecutionAsset, modelStarterExecutionAssetId, ModelStarterExecutionSchema, validateModelStarterExecution, type ModelStarterExecution } from \"./model-starter-execution.js\";\nimport { decodeTasksetPackageFile, type TasksetPackageFile } from \"./taskset-package-files.js\";\n\n/** Resolve the same private execution graph for bound and ordinary packages.\n * Package admission separately validates the enclosing release and file graph. */\nexport function resolveTasksetPackageExecution(input: {\n taskset: TasksetRelease;\n files: TasksetPackageFile[];\n modelResources?: { execution?: ModelStarterExecution };\n}): { execution: ModelStarterExecution; assets: LearningTextAsset[] } | null {\n if (input.taskset.environment.entrypoint !== \"openpond.javascript-environment.v1\") return null;\n const byId = new Map(input.files.map(file => [file.asset.id, file]));\n const read = (id: string): LearningTextAsset => {\n const file = byId.get(id);\n if (!file) throw new Error(`Taskset environment asset is missing: ${id}.`);\n if (file.asset.sizeBytes > 524_288) throw new Error(\"Taskset environment source exceeds the authored asset limit.\");\n const text = new TextDecoder(\"utf-8\", { fatal: true }).decode(decodeTasksetPackageFile(file));\n return LearningTextAssetSchema.parse(sealLearningContent({ schemaVersion: \"openpond.learningTextAsset.v1\", id, revision: 1, asset: file.asset, text }));\n };\n let execution: ModelStarterExecution;\n if (input.modelResources) {\n if (!input.modelResources.execution) throw new Error(\"Bound Taskset JavaScript execution resources are missing.\");\n execution = ModelStarterExecutionSchema.parse(input.modelResources.execution);\n } else {\n const declaration = read(modelStarterExecutionAssetId(input.taskset));\n if (declaration.asset.visibility !== \"host_private\" || declaration.asset.mediaType !== \"application/json\" || declaration.asset.path !== \"environment/execution.json\") throw new Error(\"Taskset execution declaration must be private JSON at environment/execution.json.\");\n execution = ModelStarterExecutionSchema.parse(JSON.parse(declaration.text));\n }\n const ids = new Set([execution.javascript.module.id,\n ...[execution.environment.actionSchemaRef, execution.environment.observationSchemaRef, execution.environment.stateSchemaRef].flatMap(ref => ref ? [ref.id] : []),\n ...input.taskset.tasks.flatMap(task => task.privilegedContextRef ? [task.privilegedContextRef] : []),\n ]);\n const assets = [...ids].map(read);\n validateModelStarterExecution(execution, input.taskset, assets);\n return { execution, assets };\n}\n\n/** Regenerate the declaration when publication reseals its execution releases. */\nexport function createTasksetPackageExecutionFile(execution: ModelStarterExecution): TasksetPackageFile {\n const asset = createModelStarterExecutionAsset(execution);\n const bytes = new TextEncoder().encode(asset.text);\n let raw = \"\";\n for (const byte of bytes) raw += String.fromCharCode(byte);\n return { asset: asset.asset, base64: btoa(raw) };\n}\n", "import { z } from \"zod\";\nimport { contentHash, type ImmutableAssetRef } from \"@openpond/harness\";\nimport { EnvironmentReleaseSchema, VerifierSetReleaseSchema, verifyEnvironmentRelease, verifyVerifierSetRelease } from \"@openpond/evals\";\nimport { assertTasksetRelease, TasksetReleaseSchema } from \"@openpond/evals/tasksets\";\nimport { assertBoundedTaskJson } from \"@openpond/evals/task-schema\";\nimport { ModelTasksetPackageSchema, validateModelTasksetPackage } from \"./model-taskset-derivation.js\";\nimport { taskBatchPackageMetadata } from \"@openpond/evals/learning\";\nimport { TasksetPackageLearningResourcesSchema, learningPackageContextFiles, validateTasksetLearningResources } from \"./taskset-package-learning.js\";\nimport { assertModelTasksetAuthoring } from \"./model-taskset-authoring-lineage.js\";\nimport { resolveTasksetPackageExecution } from \"./taskset-package-execution.js\";\nimport { MAX_TASKSET_PACKAGE_BYTES, TasksetPackageFileSchema, decodeTasksetPackageFile } from \"./taskset-package-files.js\";\nexport { MAX_TASKSET_PACKAGE_BYTES, TasksetPackageFileSchema, decodeTasksetPackageFile } from \"./taskset-package-files.js\";\nexport { resolveTasksetPackageExecution, createTasksetPackageExecutionFile } from \"./taskset-package-execution.js\";\n\nconst BoundModelResourcesSchema = ModelTasksetPackageSchema.omit({ taskset: true, executionResources: true });\nexport const TasksetPackageContentSchema = z.object({\n schemaVersion: z.literal(\"openpond.tasksetPackage.v1\"),\n taskset: TasksetReleaseSchema,\n environment: EnvironmentReleaseSchema,\n verifierSet: VerifierSetReleaseSchema,\n files: z.array(TasksetPackageFileSchema).max(10_000),\n modelResources: BoundModelResourcesSchema.optional(),\n learningResources: TasksetPackageLearningResourcesSchema.optional(),\n}).strict();\nexport const TasksetPackageSchema = TasksetPackageContentSchema.extend({ contentHash: z.string().regex(/^[a-f0-9]{64}$/) }).strict();\nexport type TasksetPackage = z.infer<typeof TasksetPackageSchema>;\n\n/** The selected binding belongs to the package's declared authoring graph. */\nexport function tasksetPackageRewardBinding(value: TasksetPackage) {\n return value.learningResources ? taskBatchPackageMetadata(value.taskset).binding : value.modelResources?.rewardBinding ?? null;\n}\n\n/** Instructions follow the admitted authoring graph. An ordinary package with\n * no instructions declares an empty prompt, never its display name. */\nexport function resolveTasksetPackageInstructions(value: Pick<TasksetPackage, \"taskset\" | \"modelResources\" | \"learningResources\">): string {\n if (value.learningResources) return taskBatchPackageMetadata(value.taskset).definition.instructions;\n if (value.modelResources) return value.modelResources.taskDefinition.instructions;\n const authoring = z.object({ instructions: z.string().max(20_000).optional() }).passthrough()\n .parse(value.taskset.metadata.ordinaryAuthoring ?? {});\n return authoring.instructions ?? \"\";\n}\n\n/** Admission verifies the complete declared dependency graph, not readiness or\n * permission to execute it. Hosts separately authorize the workspace/project. */\nexport function validateTasksetPackage(value: unknown): TasksetPackage {\n assertBoundedTaskJson(value, MAX_TASKSET_PACKAGE_BYTES);\n const result = TasksetPackageSchema.parse(value);\n const { contentHash: hash, ...content } = result;\n if (contentHash(content) !== hash) throw new Error(\"Taskset package content hash differs from its bytes.\");\n const { taskset, environment, verifierSet } = result;\n assertTasksetRelease(taskset);\n const authoring = assertModelTasksetAuthoring(taskset);\n if (authoring && (result.modelResources || result.learningResources)) throw new Error(\"Taskset package cannot declare competing authoring graphs.\");\n if (!verifyEnvironmentRelease(environment) || !verifyVerifierSetRelease(verifierSet)\n || !same(taskset.environmentRelease, { id: environment.id, contentHash: environment.contentHash })\n || !same(taskset.verifierSetRelease, { id: verifierSet.id, contentHash: verifierSet.contentHash })\n || !same(taskset.environment, environment.contract) || !same(taskset.graders, verifierSet.graders)) {\n throw new Error(\"Taskset package execution releases do not match its Taskset.\");\n }\n const files = new Map<string, z.infer<typeof TasksetPackageFileSchema>>();\n for (const file of result.files) {\n if (files.has(file.asset.id)) throw new Error(`Duplicate Taskset asset identity: ${file.asset.id}.`);\n decodeTasksetPackageFile(file);\n files.set(file.asset.id, file);\n }\n function requireAsset(ref: ImmutableAssetRef) {\n const file = files.get(ref.id);\n if (!file || !same(file.asset, ref)) throw new Error(`Taskset package asset is missing or mismatched: ${ref.id}.`);\n }\n for (const task of taskset.tasks) {\n for (const asset of task.artifactRefs) requireAsset(asset);\n for (const output of task.requiredOutputs ?? []) if (output.schemaRef) requireAsset(output.schemaRef);\n if (task.privilegedContextRef && files.get(task.privilegedContextRef)?.asset.visibility !== \"host_private\") {\n throw new Error(`Taskset package private context is missing: ${task.id}.`);\n }\n }\n for (const ref of [environment.actionSchemaRef, environment.observationSchemaRef, environment.stateSchemaRef]) if (ref) requireAsset(ref);\n for (const grader of taskset.graders) {\n const ref = \"verifierRef\" in grader ? grader.verifierRef : \"rubricRef\" in grader ? grader.rubricRef : null;\n if (ref) {\n requireAsset(ref);\n if (ref.visibility === \"policy\") throw new Error(`Taskset grader asset must be private: ${ref.id}.`);\n }\n }\n if (taskset.metrics?.customAggregator) {\n const aggregator = taskset.metrics.customAggregator;\n const modules = result.files.filter(file => file.asset.path === aggregator.module);\n if (modules.length !== 1 || modules[0]!.asset.contentHash !== aggregator.contentHash || modules[0]!.asset.sizeBytes > 524_288 || modules[0]!.asset.visibility === \"policy\") {\n throw new Error(\"Taskset metric module is missing or mismatched, public, or exceeds the source limit.\");\n }\n }\n for (const declarations of [taskset.metadata.environmentResources, environment.metadata.resources]) {\n if (declarations === undefined) continue;\n for (const resource of z.array(z.object({ path: z.string().min(1) }).passthrough()).parse(declarations)) {\n if (!result.files.some(file => file.asset.path === resource.path)) throw new Error(`Taskset environment resource is missing: ${resource.path}.`);\n }\n }\n if (result.learningResources) {\n if (result.modelResources) throw new Error(\"Taskset package cannot declare competing authoring graphs.\");\n const learning = validateTasksetLearningResources(taskset, result.learningResources);\n for (const expected of learningPackageContextFiles(learning)) {\n if (!same(files.get(expected.asset.id), expected)) throw new Error(\"Taskset private context differs from its reviewed evidence.\");\n }\n for (const asset of learning.assets) requireAsset(asset.asset);\n } else if (result.modelResources) {\n const model = validateModelTasksetPackage({ ...result.modelResources, taskset, executionResources: { environment, verifierSet } });\n for (const asset of model.assets) requireAsset(asset.asset);\n } else if ([\"starter\", \"rewardBinding\", \"rewardExecution\", \"modelTasksetDerivation\", \"learning\"].some(key => taskset.metadata[key] !== undefined)) {\n throw new Error(\"Bound Taskset publication requires its complete model resources.\");\n }\n resolveTasksetPackageExecution(result);\n resolveTasksetPackageInstructions(result);\n return result;\n}\n\nexport function createTasksetPackage(value: z.input<typeof TasksetPackageContentSchema>): TasksetPackage {\n assertBoundedTaskJson(value, MAX_TASKSET_PACKAGE_BYTES);\n const content = TasksetPackageContentSchema.parse(value);\n return validateTasksetPackage({ ...content, contentHash: contentHash(content) });\n}\n\nfunction same(left: unknown, right: unknown): boolean {\n return contentHash({ value: left }) === contentHash({ value: right });\n}\n", "import { contentHash } from \"@openpond/harness\";\nimport { sameLearningRef } from \"@openpond/evals/learning\";\nimport { ModelTasksetAuthoringSchema } from \"./model-taskset-authoring-contracts.js\";\n\nexport function modelAuthoredTasksetId(lineage: { owner: unknown; root: unknown }) {\n return `model-authored-taskset-${contentHash({ owner: lineage.owner, root: lineage.root })}`;\n}\n\n/** Ownership metadata must describe this exact immutable revision. */\nexport function assertModelTasksetAuthoring(taskset: { id: string; revision: number; metadata: Record<string, unknown> }) {\n if (taskset.metadata.modelTasksetAuthoring === undefined) return null;\n const lineage = ModelTasksetAuthoringSchema.parse(taskset.metadata.modelTasksetAuthoring);\n if (taskset.id !== modelAuthoredTasksetId(lineage)\n || (taskset.revision === 1 ? !sameLearningRef(lineage.parent, lineage.root)\n : lineage.parent.id !== taskset.id || lineage.parent.revision !== taskset.revision - 1)) {\n throw new Error(\"Authored Taskset revision differs from its ownership lineage.\");\n }\n return lineage;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["contentHash", "asset", "z", "EnvironmentReleaseSchema", "VerifierSetReleaseSchema", "createLearningTextAsset", "sealLearningContent", "verifyLearningTextAsset", "z", "EnvironmentReleaseSchema", "VerifierSetReleaseSchema", "sealLearningContent", "createLearningTextAsset", "verifyLearningTextAsset", "z", "verifyEnvironmentRelease", "verifyVerifierSetRelease", "learningRef", "sealLearningContent", "verifyLearningTextAsset", "z", "sealLearningContent", "learningRef", "verifyEnvironmentRelease", "verifyVerifierSetRelease", "verifyLearningTextAsset", "asset", "z", "LearningTextAssetSchema", "assertLearningContentHash", "learningRef", "sameLearningRef", "verifyLearningTextAsset", "z", "LearningTextAssetSchema", "sameLearningRef", "learningRef", "assertLearningContentHash", "source", "asset", "verifyLearningTextAsset", "z", "z", "LearningTextAssetSchema", "sealLearningContent", "LearningTextAssetSchema", "sealLearningContent", "z", "EnvironmentReleaseSchema", "VerifierSetReleaseSchema", "verifyEnvironmentRelease", "verifyVerifierSetRelease", "assertTasksetRelease", "TasksetReleaseSchema", "assertBoundedTaskJson", "taskBatchPackageMetadata", "sameLearningRef", "sameLearningRef", "z", "TasksetReleaseSchema", "EnvironmentReleaseSchema", "VerifierSetReleaseSchema", "taskBatchPackageMetadata", "assertBoundedTaskJson", "assertTasksetRelease", "verifyEnvironmentRelease", "verifyVerifierSetRelease", "same"]
7
+ }
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-WT7JU2CT.js";
4
4
  import {
5
5
  decodeTasksetPackageFile
6
- } from "./chunk-IDLMILN4.js";
6
+ } from "./chunk-T5JMZVQR.js";
7
7
  import {
8
8
  CapabilityRequirementSchema,
9
9
  ToolDeclarationSchema
@@ -465,4 +465,4 @@ export {
465
465
  projectLearningBatchGraders,
466
466
  learningVerifierModule
467
467
  };
468
- //# sourceMappingURL=chunk-AUQOAMHL.js.map
468
+ //# sourceMappingURL=chunk-TB33HKGV.js.map
@@ -3,7 +3,7 @@ import {
3
3
  validateModelStarterExecution,
4
4
  validateModelTasksetPackage,
5
5
  validateTasksetPackage
6
- } from "./chunk-IDLMILN4.js";
6
+ } from "./chunk-T5JMZVQR.js";
7
7
  import {
8
8
  contentHash
9
9
  } from "./chunk-QUOW6URQ.js";
@@ -13,7 +13,10 @@ import {
13
13
  ModelProjectTrainingSetupSchema,
14
14
  ModelProjectVersionedRefSchema,
15
15
  canonicalSha256
16
- } from "./chunk-ZNFOVV7B.js";
16
+ } from "./chunk-XANQWTTP.js";
17
+ import {
18
+ ModelInitialLearningSchema
19
+ } from "./chunk-3KXDH6OB.js";
17
20
 
18
21
  // src/model-starters.ts
19
22
  import { z } from "zod";
@@ -165,7 +168,8 @@ var ModelStarterCreationIntentSchema = z.object({
165
168
  starter: RefSchema,
166
169
  startingModel: ModelProjectBaseModelSchema,
167
170
  method: ModelProjectTrainingMethodSchema,
168
- rewardBindingRef: RefSchema.nullable().optional()
171
+ rewardBindingRef: RefSchema.nullable().optional(),
172
+ learning: ModelInitialLearningSchema.optional()
169
173
  }).strict();
170
174
  var ModelStarterCreationRequestSchema = ModelStarterCreationIntentSchema.extend({
171
175
  schemaVersion: z.literal("openpond.modelStarterCreation.v1"),
@@ -304,4 +308,4 @@ export {
304
308
  previewModelStarter,
305
309
  validateResolvedModelStarter
306
310
  };
307
- //# sourceMappingURL=chunk-DV7XI3UE.js.map
311
+ //# sourceMappingURL=chunk-VW2SNUWB.js.map