openpond-sdk 0.3.3 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/MODEL_STARTERS.md +26 -0
  2. package/TASKSETS.md +55 -0
  3. package/dist/actions-local.js +67 -118
  4. package/dist/actions-local.js.map +4 -4
  5. package/dist/actions.js +4 -92
  6. package/dist/actions.js.map +4 -4
  7. package/dist/chunk-25TBEGXB.js +220 -0
  8. package/dist/chunk-25TBEGXB.js.map +7 -0
  9. package/dist/chunk-27ETSPHQ.js +83 -0
  10. package/dist/chunk-27ETSPHQ.js.map +7 -0
  11. package/dist/chunk-5PRP457R.js +477 -0
  12. package/dist/chunk-5PRP457R.js.map +7 -0
  13. package/dist/chunk-65D4C7HP.js +273 -0
  14. package/dist/chunk-65D4C7HP.js.map +7 -0
  15. package/dist/chunk-6LGGLXAM.js +2395 -0
  16. package/dist/chunk-6LGGLXAM.js.map +7 -0
  17. package/dist/chunk-747CMU2Y.js +222 -0
  18. package/dist/chunk-747CMU2Y.js.map +7 -0
  19. package/dist/chunk-7O5X7DBU.js +80 -0
  20. package/dist/chunk-7O5X7DBU.js.map +7 -0
  21. package/dist/chunk-A4ZDOZKP.js +115 -0
  22. package/dist/chunk-A4ZDOZKP.js.map +7 -0
  23. package/dist/chunk-APHPXQEA.js +155 -0
  24. package/dist/chunk-APHPXQEA.js.map +7 -0
  25. package/dist/chunk-AVW35YOH.js +574 -0
  26. package/dist/chunk-AVW35YOH.js.map +7 -0
  27. package/dist/chunk-EPJM7VEV.js +177 -0
  28. package/dist/chunk-EPJM7VEV.js.map +7 -0
  29. package/dist/chunk-EV4PKJWN.js +1373 -0
  30. package/dist/chunk-EV4PKJWN.js.map +7 -0
  31. package/dist/chunk-K5ZCYOZO.js +49 -0
  32. package/dist/chunk-K5ZCYOZO.js.map +7 -0
  33. package/dist/chunk-LXXQVGQY.js +1 -0
  34. package/dist/chunk-LXXQVGQY.js.map +7 -0
  35. package/dist/chunk-NF63YMOL.js +593 -0
  36. package/dist/chunk-NF63YMOL.js.map +7 -0
  37. package/dist/chunk-P27DQ65Z.js +138 -0
  38. package/dist/chunk-P27DQ65Z.js.map +7 -0
  39. package/dist/chunk-QLEJOCQX.js +72 -0
  40. package/dist/chunk-QLEJOCQX.js.map +7 -0
  41. package/dist/chunk-S7I45WJQ.js +57 -0
  42. package/dist/chunk-S7I45WJQ.js.map +7 -0
  43. package/dist/index.js +33 -2488
  44. package/dist/index.js.map +4 -4
  45. package/dist/learning.js +16 -2042
  46. package/dist/learning.js.map +4 -4
  47. package/dist/model-batch-review.js +5 -42
  48. package/dist/model-batch-review.js.map +3 -3
  49. package/dist/model-projects.js +29 -430
  50. package/dist/model-projects.js.map +3 -3
  51. package/dist/model-starter-attempts.js +13 -420
  52. package/dist/model-starter-attempts.js.map +4 -4
  53. package/dist/model-starter-catalog.js +17 -460
  54. package/dist/model-starter-catalog.js.map +4 -4
  55. package/dist/model-starters.js +32 -709
  56. package/dist/model-starters.js.map +4 -4
  57. package/dist/model-taskset-authoring.js +11 -44
  58. package/dist/model-taskset-authoring.js.map +3 -3
  59. package/dist/model-taskset-runs.js +196 -0
  60. package/dist/model-taskset-runs.js.map +7 -0
  61. package/dist/profile-actions.js +4 -211
  62. package/dist/profile-actions.js.map +3 -3
  63. package/dist/project-actions.js +4 -224
  64. package/dist/project-actions.js.map +3 -3
  65. package/dist/refiner.js +14 -554
  66. package/dist/refiner.js.map +4 -4
  67. package/dist/taskset-catalog.js +9 -104
  68. package/dist/taskset-catalog.js.map +3 -3
  69. package/dist/taskset-drafts.js +465 -0
  70. package/dist/taskset-drafts.js.map +7 -0
  71. package/dist/taskset-packages.js +946 -3089
  72. package/dist/taskset-packages.js.map +4 -4
  73. package/dist/training.js +43 -822
  74. package/dist/training.js.map +4 -4
  75. package/dist/types/packages/sdk/src/index.d.ts +3 -3
  76. package/dist/types/packages/sdk/src/index.d.ts.map +1 -1
  77. package/dist/types/packages/sdk/src/learning-client.d.ts +130 -0
  78. package/dist/types/packages/sdk/src/learning-client.d.ts.map +1 -0
  79. package/dist/types/packages/sdk/src/learning.d.ts +1 -129
  80. package/dist/types/packages/sdk/src/learning.d.ts.map +1 -1
  81. package/dist/types/packages/sdk/src/model-taskset-runs-contracts.d.ts +568 -0
  82. package/dist/types/packages/sdk/src/model-taskset-runs-contracts.d.ts.map +1 -0
  83. package/dist/types/packages/sdk/src/model-taskset-runs.d.ts +722 -0
  84. package/dist/types/packages/sdk/src/model-taskset-runs.d.ts.map +1 -0
  85. package/dist/types/packages/sdk/src/taskset-authored-contracts.d.ts +1170 -0
  86. package/dist/types/packages/sdk/src/taskset-authored-contracts.d.ts.map +1 -0
  87. package/dist/types/packages/sdk/src/taskset-authored-files.d.ts +560 -0
  88. package/dist/types/packages/sdk/src/taskset-authored-files.d.ts.map +1 -0
  89. package/dist/types/packages/sdk/src/taskset-authored-portable-release.d.ts +92 -0
  90. package/dist/types/packages/sdk/src/taskset-authored-portable-release.d.ts.map +1 -0
  91. package/dist/types/packages/sdk/src/taskset-authored-tool-environment.d.ts +15 -0
  92. package/dist/types/packages/sdk/src/taskset-authored-tool-environment.d.ts.map +1 -0
  93. package/dist/types/packages/sdk/src/taskset-authored-validation.d.ts +18 -0
  94. package/dist/types/packages/sdk/src/taskset-authored-validation.d.ts.map +1 -0
  95. package/dist/types/packages/sdk/src/taskset-draft-api-contracts.d.ts +1681 -0
  96. package/dist/types/packages/sdk/src/taskset-draft-api-contracts.d.ts.map +1 -0
  97. package/dist/types/packages/sdk/src/taskset-draft-authoring.d.ts +19 -0
  98. package/dist/types/packages/sdk/src/taskset-draft-authoring.d.ts.map +1 -0
  99. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts +2713 -0
  100. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts.map +1 -0
  101. package/dist/types/packages/sdk/src/taskset-draft-core.d.ts +1000 -0
  102. package/dist/types/packages/sdk/src/taskset-draft-core.d.ts.map +1 -0
  103. package/dist/types/packages/sdk/src/taskset-draft-dataset-artifacts.d.ts +429 -0
  104. package/dist/types/packages/sdk/src/taskset-draft-dataset-artifacts.d.ts.map +1 -0
  105. package/dist/types/packages/sdk/src/taskset-draft-dataset-sources.d.ts +284 -0
  106. package/dist/types/packages/sdk/src/taskset-draft-dataset-sources.d.ts.map +1 -0
  107. package/dist/types/packages/sdk/src/taskset-draft-document.d.ts +846 -0
  108. package/dist/types/packages/sdk/src/taskset-draft-document.d.ts.map +1 -0
  109. package/dist/types/packages/sdk/src/taskset-draft-files.d.ts +8 -0
  110. package/dist/types/packages/sdk/src/taskset-draft-files.d.ts.map +1 -0
  111. package/dist/types/packages/sdk/src/taskset-draft-harness-actions.d.ts +28 -0
  112. package/dist/types/packages/sdk/src/taskset-draft-harness-actions.d.ts.map +1 -0
  113. package/dist/types/packages/sdk/src/taskset-draft-manifests.d.ts +8 -0
  114. package/dist/types/packages/sdk/src/taskset-draft-manifests.d.ts.map +1 -0
  115. package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts +967 -0
  116. package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts.map +1 -0
  117. package/dist/types/packages/sdk/src/taskset-draft-publication.d.ts +10 -0
  118. package/dist/types/packages/sdk/src/taskset-draft-publication.d.ts.map +1 -0
  119. package/dist/types/packages/sdk/src/taskset-draft-source.d.ts +1297 -0
  120. package/dist/types/packages/sdk/src/taskset-draft-source.d.ts.map +1 -0
  121. package/dist/types/packages/sdk/src/taskset-draft-workspace.d.ts +1597 -0
  122. package/dist/types/packages/sdk/src/taskset-draft-workspace.d.ts.map +1 -0
  123. package/dist/types/packages/sdk/src/taskset-drafts.d.ts +16 -0
  124. package/dist/types/packages/sdk/src/taskset-drafts.d.ts.map +1 -0
  125. package/dist/types/packages/sdk/src/taskset-package-grader-projection.d.ts +64 -0
  126. package/dist/types/packages/sdk/src/taskset-package-grader-projection.d.ts.map +1 -0
  127. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts +1514 -0
  128. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts.map +1 -0
  129. package/dist/types/packages/sdk/src/taskset-packages.d.ts +6 -0
  130. package/dist/types/packages/sdk/src/taskset-packages.d.ts.map +1 -1
  131. package/dist/workflows.js +4 -221
  132. package/dist/workflows.js.map +3 -3
  133. package/package.json +11 -3
@@ -0,0 +1,1373 @@
1
+ import {
2
+ FailureClassSchema,
3
+ HarnessRefinerCapabilitiesSchema,
4
+ HarnessRefinerEvidenceBasisSchema,
5
+ ImmutableArtifactRefSchema,
6
+ ImmutableAssetRefSchema,
7
+ ImmutableReleaseRefSchema,
8
+ MetadataSchema,
9
+ ReleaseHashSchema,
10
+ ReleaseIdSchema,
11
+ ReleaseTimestampSchema,
12
+ contentHash
13
+ } from "./chunk-NF63YMOL.js";
14
+
15
+ // ../../node_modules/.pnpm/@openpond+harness@0.2.6/node_modules/@openpond/harness/dist/tools.js
16
+ import { z } from "zod";
17
+ var ToolDeclarationSchema = z.object({
18
+ name: z.string().trim().min(1).max(64).regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/),
19
+ description: z.string().trim().min(1).max(2e3),
20
+ inputSchema: z.record(z.string(), z.unknown()),
21
+ inputSchemaHash: ReleaseHashSchema,
22
+ sideEffect: z.enum(["read", "write"]),
23
+ timeoutMs: z.number().int().positive().max(36e5)
24
+ }).strict();
25
+ var CapabilityRequirementSchema = z.object({
26
+ id: ReleaseIdSchema,
27
+ required: z.boolean(),
28
+ scopes: z.array(z.string().trim().min(1).max(500)).max(100).default([]),
29
+ portability: z.enum(["portable", "host_adapter", "local_only", "hosted_only"])
30
+ }).strict();
31
+
32
+ // ../../node_modules/.pnpm/@openpond+harness@0.2.6/node_modules/@openpond/harness/dist/models.js
33
+ import { z as z2 } from "zod";
34
+ var ModelRefSchema = z2.object({
35
+ provider: ReleaseIdSchema,
36
+ model: ReleaseIdSchema,
37
+ revision: z2.string().trim().min(1).max(500).nullable().default(null),
38
+ artifactHash: ReleaseHashSchema.nullable().default(null),
39
+ tokenizerRevision: z2.string().trim().min(1).max(500).nullable().default(null),
40
+ chatTemplateHash: ReleaseHashSchema.nullable().default(null)
41
+ }).strict();
42
+ var PROVIDER_IDS = [
43
+ "openpond",
44
+ "codex",
45
+ "anthropic",
46
+ "openai",
47
+ "xai",
48
+ "google",
49
+ "openrouter",
50
+ "deepseek",
51
+ "zai",
52
+ "moonshot",
53
+ "together",
54
+ "groq",
55
+ "custom-openai-compatible"
56
+ ];
57
+ var ProviderIdSchema = z2.enum(PROVIDER_IDS);
58
+ var ChatModelRefSchema = z2.object({
59
+ providerId: ProviderIdSchema,
60
+ modelId: z2.string().trim().min(1).max(300)
61
+ });
62
+
63
+ // ../../node_modules/.pnpm/@openpond+harness@0.2.6/node_modules/@openpond/harness/dist/evaluation-review.js
64
+ import { z as z3 } from "zod";
65
+ var BoundedTextSchema = z3.string().trim().min(1).max(1e5);
66
+ var HarnessEvaluationReviewClassificationSchema = z3.enum([
67
+ "no_action",
68
+ "harness_maintenance",
69
+ "runtime",
70
+ "product",
71
+ "taskset",
72
+ "model_improvement"
73
+ ]);
74
+ var HarnessEvaluationReviewAuthoritySchema = z3.enum([
75
+ "none",
76
+ "runtime_service",
77
+ "product_team",
78
+ "human_review",
79
+ "evaluation_system",
80
+ "training_system"
81
+ ]);
82
+ var HarnessReviewEvidenceKindSchema = z3.enum([
83
+ "observation",
84
+ "trigger",
85
+ "route_decision",
86
+ "refiner_outcome",
87
+ "proposal",
88
+ "validation",
89
+ "apply_receipt",
90
+ "harness_advance",
91
+ "rollback",
92
+ "work_outcome",
93
+ "taskset",
94
+ "evaluation",
95
+ "training_qualification",
96
+ "model_candidate"
97
+ ]);
98
+ var HarnessReviewOwnerScopeSchema = z3.object({
99
+ kind: z3.enum(["personal", "team"]),
100
+ id: ReleaseIdSchema
101
+ }).strict();
102
+ var HarnessReviewSourcePolicyRefSchema = z3.object({
103
+ policy: ImmutableReleaseRefSchema,
104
+ state: z3.enum(["authorized", "revoked", "deleted", "expired"]),
105
+ checkedAt: ReleaseTimestampSchema
106
+ }).strict();
107
+ var HarnessReviewEvidenceRefSchema = z3.object({
108
+ evidence: ImmutableReleaseRefSchema,
109
+ kind: HarnessReviewEvidenceKindSchema,
110
+ sourceRef: ReleaseIdSchema,
111
+ sourcePolicy: HarnessReviewSourcePolicyRefSchema,
112
+ occurrenceKey: ReleaseHashSchema,
113
+ occurredAt: ReleaseTimestampSchema
114
+ }).strict();
115
+ var HarnessReviewExcludedEvidenceSchema = z3.object({
116
+ evidence: ImmutableReleaseRefSchema,
117
+ sourcePolicy: HarnessReviewSourcePolicyRefSchema.nullable(),
118
+ reason: z3.enum([
119
+ "outside_scope",
120
+ "before_watermark",
121
+ "duplicate",
122
+ "resolved",
123
+ "revoked",
124
+ "deleted",
125
+ "expired",
126
+ "sensitive",
127
+ "unverified",
128
+ "budget"
129
+ ])
130
+ }).strict();
131
+ var HarnessReviewWatermarkSchema = z3.object({
132
+ cursor: ReleaseHashSchema,
133
+ throughCreatedAt: ReleaseTimestampSchema
134
+ }).strict();
135
+ var HarnessReviewClaimSchema = z3.object({
136
+ fingerprint: ReleaseHashSchema,
137
+ recurrenceFamily: z3.string().trim().min(1).max(1e3),
138
+ statement: BoundedTextSchema,
139
+ candidateDisposition: z3.enum(["observe", "confirm"]).optional(),
140
+ independentOccurrences: z3.number().int().positive().max(1e6),
141
+ unresolvedOccurrences: z3.number().int().positive().max(1e6)
142
+ }).strict().refine((claim) => claim.unresolvedOccurrences <= claim.independentOccurrences, "unresolved occurrences cannot exceed independent occurrences");
143
+ var HarnessReviewTriageLayerSchema = z3.enum([
144
+ "harness",
145
+ "runtime",
146
+ "product",
147
+ "retrieval",
148
+ "tools",
149
+ "evaluation",
150
+ "model"
151
+ ]);
152
+ var HarnessReviewTriageDecisionSchema = z3.object({
153
+ layer: HarnessReviewTriageLayerSchema,
154
+ status: z3.enum(["not_applicable", "unresolved", "resolved", "blocked"]),
155
+ reason: BoundedTextSchema,
156
+ evidenceRefs: z3.array(ImmutableReleaseRefSchema).max(1e3)
157
+ }).strict();
158
+ var HarnessEvaluationReviewReceiptContentSchema = z3.object({
159
+ schemaVersion: z3.literal("openpond.harnessEvaluationReviewReceipt.v1"),
160
+ id: ReleaseIdSchema,
161
+ ownerScope: HarnessReviewOwnerScopeSchema,
162
+ workspaceRef: ReleaseIdSchema,
163
+ harnessRelease: ImmutableReleaseRefSchema,
164
+ previousWatermark: HarnessReviewWatermarkSchema.nullable(),
165
+ nextWatermark: HarnessReviewWatermarkSchema,
166
+ selectedEvidence: z3.array(HarnessReviewEvidenceRefSchema).max(1e4),
167
+ excludedEvidence: z3.array(HarnessReviewExcludedEvidenceSchema).max(1e4),
168
+ claim: HarnessReviewClaimSchema.nullable(),
169
+ classification: HarnessEvaluationReviewClassificationSchema,
170
+ triage: z3.array(HarnessReviewTriageDecisionSchema).max(16),
171
+ reason: BoundedTextSchema,
172
+ nextAuthority: HarnessEvaluationReviewAuthoritySchema,
173
+ maxEstimatedCostUsd: z3.number().finite().nonnegative(),
174
+ tasksetProposal: ImmutableReleaseRefSchema.nullable(),
175
+ evaluation: ImmutableReleaseRefSchema.nullable(),
176
+ trainingQualification: ImmutableReleaseRefSchema.nullable(),
177
+ policyVersion: ReleaseIdSchema,
178
+ createdAt: ReleaseTimestampSchema,
179
+ metadata: MetadataSchema
180
+ }).strict().superRefine((receipt, context) => {
181
+ const selectedKeys = receipt.selectedEvidence.map((item) => `${item.evidence.id}:${item.evidence.contentHash}`);
182
+ if (new Set(selectedKeys).size !== selectedKeys.length) {
183
+ context.addIssue({
184
+ code: "custom",
185
+ message: "selected review evidence must be unique",
186
+ path: ["selectedEvidence"]
187
+ });
188
+ }
189
+ if (receipt.selectedEvidence.some((item) => item.sourcePolicy.state !== "authorized")) {
190
+ context.addIssue({
191
+ code: "custom",
192
+ message: "selected review evidence must be authorized at review time",
193
+ path: ["selectedEvidence"]
194
+ });
195
+ }
196
+ if (receipt.classification === "no_action") {
197
+ if (receipt.nextAuthority !== "none") {
198
+ context.addIssue({
199
+ code: "custom",
200
+ message: "no-action review receipts require no next authority",
201
+ path: ["nextAuthority"]
202
+ });
203
+ }
204
+ if (receipt.tasksetProposal || receipt.evaluation || receipt.trainingQualification) {
205
+ context.addIssue({
206
+ code: "custom",
207
+ message: "no-action review receipts cannot carry downstream refs"
208
+ });
209
+ }
210
+ } else if (!receipt.claim || receipt.selectedEvidence.length === 0) {
211
+ context.addIssue({
212
+ code: "custom",
213
+ message: "actionable review receipts require a claim and selected evidence"
214
+ });
215
+ }
216
+ if (receipt.classification === "runtime" && receipt.nextAuthority !== "runtime_service") {
217
+ context.addIssue({
218
+ code: "custom",
219
+ message: "runtime classifications route to runtime-service authority",
220
+ path: ["nextAuthority"]
221
+ });
222
+ }
223
+ if (receipt.classification === "product" && receipt.nextAuthority !== "product_team") {
224
+ context.addIssue({
225
+ code: "custom",
226
+ message: "product classifications route to product-team authority",
227
+ path: ["nextAuthority"]
228
+ });
229
+ }
230
+ if (receipt.classification === "taskset" && receipt.nextAuthority !== "human_review") {
231
+ context.addIssue({
232
+ code: "custom",
233
+ message: "Taskset classifications require human review"
234
+ });
235
+ }
236
+ if (receipt.classification === "model_improvement" && (!receipt.evaluation || !receipt.trainingQualification || !["human_review", "training_system"].includes(receipt.nextAuthority))) {
237
+ context.addIssue({
238
+ code: "custom",
239
+ message: "model-improvement classifications require Evaluation and qualification refs plus explicit authority"
240
+ });
241
+ }
242
+ });
243
+ var HarnessEvaluationReviewReceiptSchema = HarnessEvaluationReviewReceiptContentSchema.extend({
244
+ contentHash: ReleaseHashSchema
245
+ }).strict();
246
+ var HarnessEvaluationReviewModelEvidenceSchema = z3.object({
247
+ id: ReleaseIdSchema,
248
+ evidence: ImmutableReleaseRefSchema,
249
+ kind: HarnessReviewEvidenceKindSchema,
250
+ sourceRef: ReleaseIdSchema,
251
+ occurredAt: ReleaseTimestampSchema,
252
+ payload: z3.record(z3.string(), z3.unknown())
253
+ }).strict();
254
+ var HarnessEvaluationReviewModelNoActionSchema = z3.object({
255
+ schemaVersion: z3.literal("openpond.harnessEvaluationReviewModelDecision.v2"),
256
+ decision: z3.literal("no_action"),
257
+ reason: BoundedTextSchema,
258
+ ignoredEvidence: z3.array(z3.object({
259
+ id: ReleaseIdSchema,
260
+ reason: z3.string().trim().min(1).max(2e3)
261
+ }).strict()).max(1e3)
262
+ }).strict();
263
+ var HarnessEvaluationReviewModelActionSchema = z3.object({
264
+ schemaVersion: z3.literal("openpond.harnessEvaluationReviewModelDecision.v2"),
265
+ decision: z3.literal("review"),
266
+ classification: z3.enum([
267
+ "harness_maintenance",
268
+ "runtime",
269
+ "product",
270
+ "taskset"
271
+ ]),
272
+ selectedEvidenceIds: z3.array(ReleaseIdSchema).min(1).max(1e3),
273
+ ignoredEvidence: z3.array(z3.object({
274
+ id: ReleaseIdSchema,
275
+ reason: z3.string().trim().min(1).max(2e3)
276
+ }).strict()).max(1e3),
277
+ recurrenceFamily: z3.string().trim().min(1).max(1e3),
278
+ statement: BoundedTextSchema,
279
+ triageLayer: HarnessReviewTriageLayerSchema,
280
+ expectedOutcome: BoundedTextSchema,
281
+ counterevidence: z3.string().trim().max(1e4),
282
+ confidence: z3.number().min(0).max(1),
283
+ candidateDisposition: z3.enum(["observe", "confirm"]).nullable(),
284
+ reason: BoundedTextSchema
285
+ }).strict().superRefine((decision, context) => {
286
+ const requiresDisposition = decision.classification === "harness_maintenance";
287
+ if (requiresDisposition !== (decision.candidateDisposition !== null)) {
288
+ context.addIssue({
289
+ code: "custom",
290
+ message: "Harness maintenance requires a candidate disposition; external routes require null",
291
+ path: ["candidateDisposition"]
292
+ });
293
+ }
294
+ });
295
+ var HarnessEvaluationReviewModelResolutionSchema = z3.object({
296
+ schemaVersion: z3.literal("openpond.harnessEvaluationReviewModelDecision.v2"),
297
+ decision: z3.literal("resolve_candidate"),
298
+ candidateId: ReleaseIdSchema,
299
+ candidateFingerprint: ReleaseHashSchema,
300
+ selectedEvidenceIds: z3.array(ReleaseIdSchema).min(1).max(1e3),
301
+ ignoredEvidence: z3.array(z3.object({
302
+ id: ReleaseIdSchema,
303
+ reason: z3.string().trim().min(1).max(2e3)
304
+ }).strict()).max(1e3),
305
+ confidence: z3.number().min(0).max(1),
306
+ reason: BoundedTextSchema
307
+ }).strict();
308
+ var HarnessEvaluationReviewModelDecisionSchema = z3.discriminatedUnion("decision", [
309
+ HarnessEvaluationReviewModelNoActionSchema,
310
+ HarnessEvaluationReviewModelActionSchema,
311
+ HarnessEvaluationReviewModelResolutionSchema
312
+ ]);
313
+ var HarnessEvaluationReviewNavigationDecisionSchema = z3.object({
314
+ schemaVersion: z3.literal("openpond.harnessEvaluationReviewNavigationDecision.v1"),
315
+ selectedEvidenceIds: z3.array(ReleaseIdSchema).min(1).max(50),
316
+ reason: BoundedTextSchema
317
+ }).strict();
318
+
319
+ // ../../node_modules/.pnpm/@openpond+harness@0.2.6/node_modules/@openpond/harness/dist/harness.js
320
+ import { z as z4 } from "zod";
321
+ var PortabilityReportSchema = z4.object({
322
+ portable: z4.boolean(),
323
+ blockers: z4.array(z4.string().trim().min(1).max(2e3)).max(1e3),
324
+ localOnlyAssetRefs: z4.array(ReleaseIdSchema).max(1e4),
325
+ hostPrivateAssetRefs: z4.array(ReleaseIdSchema).max(1e4)
326
+ }).strict();
327
+ var AgentSnapshotContentSchema = z4.object({
328
+ schemaVersion: z4.literal("openpond.agentSnapshot.v2"),
329
+ id: ReleaseIdSchema,
330
+ sourceRelease: ImmutableReleaseRefSchema.nullable(),
331
+ instructions: z4.array(ImmutableAssetRefSchema).max(1e4),
332
+ skills: z4.array(ImmutableAssetRefSchema).max(1e4),
333
+ agents: z4.array(ImmutableAssetRefSchema).max(1e4),
334
+ toolDeclarations: z4.array(ToolDeclarationSchema).max(200),
335
+ capabilityRequirements: z4.array(CapabilityRequirementSchema).max(200),
336
+ dependencyLock: ImmutableAssetRefSchema,
337
+ portability: PortabilityReportSchema,
338
+ metadata: MetadataSchema
339
+ }).strict();
340
+ var AgentSnapshotSchema = AgentSnapshotContentSchema.extend({ contentHash: ReleaseHashSchema }).strict();
341
+ var LifecycleContractSchema = z4.object({
342
+ create: z4.literal(true),
343
+ reset: z4.literal(true),
344
+ step: z4.literal(true),
345
+ collect: z4.literal(true),
346
+ destroy: z4.literal(true),
347
+ resetScope: z4.enum(["task", "attempt"])
348
+ }).strict();
349
+ var GraderInterfaceContractSchema = z4.object({
350
+ visibleEvidence: z4.array(ReleaseIdSchema).max(1e3),
351
+ privilegedEvidence: z4.array(ReleaseIdSchema).max(1e3),
352
+ privateVerifierIsolation: z4.boolean()
353
+ }).strict();
354
+ var HarnessReleaseContentSchema = z4.object({
355
+ schemaVersion: z4.literal("openpond.harnessRelease.v2"),
356
+ id: ReleaseIdSchema,
357
+ agentSnapshot: ImmutableReleaseRefSchema,
358
+ program: ImmutableAssetRefSchema,
359
+ tools: z4.array(ToolDeclarationSchema).max(200),
360
+ lifecycle: LifecycleContractSchema,
361
+ graderInterface: GraderInterfaceContractSchema,
362
+ files: z4.array(ImmutableAssetRefSchema).max(1e5),
363
+ metadata: MetadataSchema
364
+ }).strict();
365
+ var HarnessReleaseSchema = HarnessReleaseContentSchema.extend({ contentHash: ReleaseHashSchema }).strict();
366
+ var ModelActionSchema = z4.object({
367
+ id: ReleaseIdSchema,
368
+ turn: z4.number().int().nonnegative(),
369
+ kind: z4.enum(["message", "tool_call", "terminal"]),
370
+ name: ReleaseIdSchema.nullable(),
371
+ arguments: z4.record(z4.string(), z4.unknown()),
372
+ content: z4.string().max(1e6).nullable()
373
+ }).strict();
374
+ var ToolObservationSchema = z4.object({
375
+ actionId: ReleaseIdSchema,
376
+ turn: z4.number().int().nonnegative(),
377
+ terminal: z4.boolean(),
378
+ output: z4.record(z4.string(), z4.unknown()),
379
+ artifactRefs: z4.array(ImmutableArtifactRefSchema).max(1e5)
380
+ }).strict();
381
+ var HarnessLifecycleEventSchema = z4.object({
382
+ sequence: z4.number().int().nonnegative(),
383
+ type: z4.enum(["created", "reset", "action", "observation", "terminal", "failure", "collected", "destroyed"]),
384
+ payloadHash: ReleaseHashSchema,
385
+ metadata: MetadataSchema
386
+ }).strict();
387
+ var HarnessTraceSchema = z4.object({
388
+ schemaVersion: z4.literal("openpond.harnessTrace.v1"),
389
+ manifest: ImmutableReleaseRefSchema,
390
+ taskId: ReleaseIdSchema,
391
+ seed: z4.string().trim().min(1).max(500),
392
+ events: z4.array(HarnessLifecycleEventSchema).max(1e6),
393
+ actions: z4.array(ModelActionSchema).max(1e5),
394
+ observations: z4.array(ToolObservationSchema).max(1e5),
395
+ terminal: z4.boolean(),
396
+ failureClass: FailureClassSchema.nullable(),
397
+ output: z4.record(z4.string(), z4.unknown()),
398
+ contentHash: ReleaseHashSchema
399
+ }).strict();
400
+
401
+ // ../../node_modules/.pnpm/@openpond+harness@0.2.6/node_modules/@openpond/harness/dist/harness-improvements.js
402
+ import { z as z6 } from "zod";
403
+
404
+ // ../../node_modules/.pnpm/@openpond+harness@0.2.6/node_modules/@openpond/harness/dist/harness-workspaces.js
405
+ import { z as z5 } from "zod";
406
+ var MetadataSchema2 = z5.record(z5.string(), z5.unknown()).default({});
407
+ var RevisionSchema = z5.number().int().nonnegative();
408
+ var BoundedTextSchema2 = z5.string().trim().min(1).max(1e5);
409
+ var HarnessOwnerScopeSchema = z5.object({
410
+ kind: z5.enum(["personal", "team"]),
411
+ id: ReleaseIdSchema
412
+ }).strict();
413
+ var HarnessCurrentChannelSchema = z5.object({
414
+ name: ReleaseIdSchema,
415
+ release: ImmutableReleaseRefSchema.nullable(),
416
+ revision: RevisionSchema
417
+ }).strict();
418
+ var HarnessWorkspaceSchema = z5.object({
419
+ schemaVersion: z5.literal("openpond.harnessWorkspace.v1"),
420
+ id: ReleaseIdSchema,
421
+ ownerScope: HarnessOwnerScopeSchema,
422
+ name: z5.string().trim().min(1).max(240),
423
+ location: z5.enum(["local", "hosted"]),
424
+ sourceRevision: z5.string().trim().min(1).max(500),
425
+ revision: RevisionSchema,
426
+ dirty: z5.boolean(),
427
+ currentChannel: HarnessCurrentChannelSchema,
428
+ createdAt: ReleaseTimestampSchema,
429
+ updatedAt: ReleaseTimestampSchema,
430
+ metadata: MetadataSchema2
431
+ }).strict();
432
+ var HarnessImprovementRouteSchema = z5.enum([
433
+ "runtime",
434
+ "memory",
435
+ "prompt",
436
+ "skill",
437
+ "agent",
438
+ "product",
439
+ "taskset",
440
+ "training"
441
+ ]);
442
+ var HarnessChangeEffectSchema = z5.enum([
443
+ "text_instruction",
444
+ "memory",
445
+ "dependency_selection",
446
+ "executable_code",
447
+ "business_logic",
448
+ "financial_logic",
449
+ "permission",
450
+ "connected_app",
451
+ "publication",
452
+ "deployment",
453
+ "training",
454
+ "model_binding",
455
+ "team_or_global"
456
+ ]);
457
+ var HarnessOverlayEditSchema = z5.object({
458
+ id: ReleaseIdSchema,
459
+ route: HarnessImprovementRouteSchema,
460
+ operation: z5.enum(["create", "update", "delete"]),
461
+ target: z5.string().trim().min(1).max(2e3),
462
+ summary: z5.string().trim().min(1).max(2e3),
463
+ content: z5.string().max(1e6).nullable(),
464
+ contentHash: ReleaseHashSchema.nullable(),
465
+ effects: z5.array(HarnessChangeEffectSchema).min(1).max(20)
466
+ }).strict().superRefine((edit, context) => {
467
+ if (edit.operation === "delete") {
468
+ if (edit.content !== null || edit.contentHash !== null) {
469
+ context.addIssue({
470
+ code: "custom",
471
+ message: "delete edits cannot include replacement content",
472
+ path: ["content"]
473
+ });
474
+ }
475
+ return;
476
+ }
477
+ if (edit.content === null || edit.contentHash === null) {
478
+ context.addIssue({
479
+ code: "custom",
480
+ message: "create and update edits require content and contentHash",
481
+ path: ["content"]
482
+ });
483
+ return;
484
+ }
485
+ const expected = contentHash(edit.content);
486
+ if (edit.contentHash !== expected) {
487
+ context.addIssue({
488
+ code: "custom",
489
+ message: `edit contentHash is ${edit.contentHash}; expected ${expected}`,
490
+ path: ["contentHash"]
491
+ });
492
+ }
493
+ });
494
+ var HarnessWorkspaceRevisionRefSchema = z5.object({
495
+ workspaceId: ReleaseIdSchema,
496
+ revision: RevisionSchema,
497
+ sourceRevision: z5.string().trim().min(1).max(500),
498
+ channelRevision: RevisionSchema
499
+ }).strict();
500
+ var HarnessOverlaySnapshotRefSchema = z5.object({
501
+ id: ReleaseIdSchema,
502
+ revision: RevisionSchema,
503
+ contentHash: ReleaseHashSchema
504
+ }).strict();
505
+ var HarnessTurnSnapshotSchema = z5.object({
506
+ schemaVersion: z5.literal("openpond.harnessTurnSnapshot.v1"),
507
+ workspaceId: ReleaseIdSchema,
508
+ workspaceRevision: RevisionSchema,
509
+ sourceRevision: z5.string().trim().min(1).max(500),
510
+ channelName: ReleaseIdSchema,
511
+ channelRevision: RevisionSchema,
512
+ harnessRelease: ImmutableReleaseRefSchema,
513
+ toolCatalogHash: ReleaseHashSchema.nullable().optional(),
514
+ overlay: HarnessOverlaySnapshotRefSchema.nullable().optional().default(null)
515
+ }).strict();
516
+ var HarnessRunOverlayContentSchema = z5.object({
517
+ schemaVersion: z5.literal("openpond.harnessRunOverlay.v1"),
518
+ id: ReleaseIdSchema,
519
+ runId: ReleaseIdSchema,
520
+ baseHarnessRelease: ImmutableReleaseRefSchema,
521
+ workspace: HarnessWorkspaceRevisionRefSchema,
522
+ revision: RevisionSchema,
523
+ status: z5.enum(["active", "frozen", "abandoned"]),
524
+ edits: z5.array(HarnessOverlayEditSchema).max(1e3),
525
+ createdAt: ReleaseTimestampSchema,
526
+ updatedAt: ReleaseTimestampSchema,
527
+ metadata: MetadataSchema2
528
+ }).strict();
529
+ var HarnessRunOverlaySchema = HarnessRunOverlayContentSchema.extend({
530
+ contentHash: ReleaseHashSchema
531
+ }).strict();
532
+ var HarnessProposalEvidenceRefSchema = z5.object({
533
+ kind: z5.enum([
534
+ "tool_event",
535
+ "recovery",
536
+ "validation",
537
+ "user_turn",
538
+ "work_output",
539
+ "work_receipt"
540
+ ]),
541
+ id: ReleaseIdSchema,
542
+ contentHash: ReleaseHashSchema.nullable()
543
+ }).strict();
544
+ var HarnessValidationPlanItemSchema = z5.object({
545
+ id: ReleaseIdSchema,
546
+ kind: z5.enum([
547
+ "dependency",
548
+ "schema",
549
+ "package",
550
+ "file_render",
551
+ "skill",
552
+ "prompt",
553
+ "business_formula",
554
+ "targeted_evaluation",
555
+ "observed_recovery",
556
+ "memory",
557
+ "component_activation"
558
+ ]),
559
+ description: BoundedTextSchema2,
560
+ required: z5.boolean()
561
+ }).strict();
562
+ var HarnessImprovementProposalContentSchema = z5.object({
563
+ schemaVersion: z5.literal("openpond.harnessImprovementProposal.v1"),
564
+ id: ReleaseIdSchema,
565
+ overlay: HarnessOverlaySnapshotRefSchema,
566
+ baseHarnessRelease: ImmutableReleaseRefSchema,
567
+ expectedWorkspace: HarnessWorkspaceRevisionRefSchema,
568
+ requestedScope: z5.enum(["personal", "team", "global"]),
569
+ route: HarnessImprovementRouteSchema,
570
+ risk: z5.enum(["low", "review", "restricted"]),
571
+ effects: z5.array(HarnessChangeEffectSchema).min(1).max(20),
572
+ evidence: z5.array(HarnessProposalEvidenceRefSchema).min(1).max(1e3),
573
+ edits: z5.array(HarnessOverlayEditSchema).min(1).max(1e3),
574
+ validationPlan: z5.array(HarnessValidationPlanItemSchema).min(1).max(100),
575
+ expectedOutcome: BoundedTextSchema2,
576
+ createdAt: ReleaseTimestampSchema,
577
+ metadata: MetadataSchema2
578
+ }).strict().superRefine((proposal, context) => {
579
+ const declaredEffects = new Set(proposal.effects);
580
+ for (const [index, edit] of proposal.edits.entries()) {
581
+ if (edit.route !== proposal.route) {
582
+ context.addIssue({
583
+ code: "custom",
584
+ message: "every edit route must match the proposal route",
585
+ path: ["edits", index, "route"]
586
+ });
587
+ }
588
+ for (const effect of edit.effects) {
589
+ if (!declaredEffects.has(effect)) {
590
+ context.addIssue({
591
+ code: "custom",
592
+ message: `edit effect ${effect} is missing from proposal effects`,
593
+ path: ["edits", index, "effects"]
594
+ });
595
+ }
596
+ }
597
+ }
598
+ if (new Set(proposal.validationPlan.map((item) => item.id)).size !== proposal.validationPlan.length) {
599
+ context.addIssue({
600
+ code: "custom",
601
+ message: "validation plan ids must be unique",
602
+ path: ["validationPlan"]
603
+ });
604
+ }
605
+ });
606
+ var HarnessImprovementProposalSchema = HarnessImprovementProposalContentSchema.extend({
607
+ contentHash: ReleaseHashSchema
608
+ }).strict();
609
+ var HarnessTargetedValidationReceiptContentSchema = z5.object({
610
+ schemaVersion: z5.literal("openpond.harnessTargetedValidationReceipt.v1"),
611
+ id: ReleaseIdSchema,
612
+ proposal: ImmutableReleaseRefSchema,
613
+ validationId: ReleaseIdSchema,
614
+ kind: HarnessValidationPlanItemSchema.shape.kind,
615
+ status: z5.enum(["passed", "failed", "blocked", "skipped"]),
616
+ summary: BoundedTextSchema2,
617
+ evidenceRefs: z5.array(HarnessProposalEvidenceRefSchema).max(1e3),
618
+ createdAt: ReleaseTimestampSchema,
619
+ metadata: MetadataSchema2
620
+ }).strict();
621
+ var HarnessTargetedValidationReceiptSchema = HarnessTargetedValidationReceiptContentSchema.extend({
622
+ contentHash: ReleaseHashSchema
623
+ }).strict();
624
+ var HarnessAdvanceDecisionSchema = z5.enum([
625
+ "advanced",
626
+ "retained",
627
+ "conflict",
628
+ "rolled_back"
629
+ ]);
630
+ var HarnessAdvanceReceiptContentSchema = z5.object({
631
+ schemaVersion: z5.literal("openpond.harnessAdvanceReceipt.v1"),
632
+ id: ReleaseIdSchema,
633
+ workspaceId: ReleaseIdSchema,
634
+ ownerScope: HarnessOwnerScopeSchema,
635
+ proposal: ImmutableReleaseRefSchema.nullable(),
636
+ expectedWorkspaceRevision: RevisionSchema,
637
+ observedWorkspaceRevision: RevisionSchema,
638
+ previousChannelRevision: RevisionSchema,
639
+ nextChannelRevision: RevisionSchema,
640
+ previousRelease: ImmutableReleaseRefSchema.nullable(),
641
+ nextRelease: ImmutableReleaseRefSchema.nullable(),
642
+ validationReceipts: z5.array(ImmutableReleaseRefSchema).max(100),
643
+ decision: HarnessAdvanceDecisionSchema,
644
+ reason: BoundedTextSchema2,
645
+ rollbackOf: ImmutableReleaseRefSchema.nullable(),
646
+ createdAt: ReleaseTimestampSchema,
647
+ metadata: MetadataSchema2
648
+ }).strict().superRefine((receipt, context) => {
649
+ const changed = receipt.nextChannelRevision === receipt.previousChannelRevision + 1;
650
+ if (["advanced", "rolled_back"].includes(receipt.decision) !== changed) {
651
+ context.addIssue({
652
+ code: "custom",
653
+ message: "only successful advancement or rollback increments the channel revision",
654
+ path: ["nextChannelRevision"]
655
+ });
656
+ }
657
+ if (receipt.decision === "rolled_back" && receipt.rollbackOf === null) {
658
+ context.addIssue({
659
+ code: "custom",
660
+ message: "rollback receipts require rollbackOf",
661
+ path: ["rollbackOf"]
662
+ });
663
+ }
664
+ if (receipt.decision !== "rolled_back" && receipt.rollbackOf !== null) {
665
+ context.addIssue({
666
+ code: "custom",
667
+ message: "rollbackOf is only valid for rollback receipts",
668
+ path: ["rollbackOf"]
669
+ });
670
+ }
671
+ });
672
+ var HarnessAdvanceReceiptSchema = HarnessAdvanceReceiptContentSchema.extend({
673
+ contentHash: ReleaseHashSchema
674
+ }).strict();
675
+ var HarnessOverlayMergeReceiptContentSchema = z5.object({
676
+ schemaVersion: z5.literal("openpond.harnessOverlayMergeReceipt.v1"),
677
+ id: ReleaseIdSchema,
678
+ workspaceId: ReleaseIdSchema,
679
+ baseHarnessRelease: ImmutableReleaseRefSchema,
680
+ leftOverlay: HarnessOverlaySnapshotRefSchema,
681
+ rightOverlay: HarnessOverlaySnapshotRefSchema,
682
+ decision: z5.enum(["merged", "conflict"]),
683
+ mergedOverlay: HarnessOverlaySnapshotRefSchema.nullable(),
684
+ conflictTargets: z5.array(z5.string().trim().min(1).max(2e3)).max(1e3),
685
+ requiresRevalidation: z5.literal(true),
686
+ createdAt: ReleaseTimestampSchema,
687
+ metadata: MetadataSchema2
688
+ }).strict().superRefine((receipt, context) => {
689
+ if (receipt.decision === "merged" !== (receipt.mergedOverlay !== null)) {
690
+ context.addIssue({
691
+ code: "custom",
692
+ message: "merged decisions require a merged overlay; conflicts cannot provide one",
693
+ path: ["mergedOverlay"]
694
+ });
695
+ }
696
+ if (receipt.decision === "conflict" !== receipt.conflictTargets.length > 0) {
697
+ context.addIssue({
698
+ code: "custom",
699
+ message: "conflict decisions require conflict targets and merged decisions cannot include them",
700
+ path: ["conflictTargets"]
701
+ });
702
+ }
703
+ });
704
+ var HarnessOverlayMergeReceiptSchema = HarnessOverlayMergeReceiptContentSchema.extend({
705
+ contentHash: ReleaseHashSchema
706
+ }).strict();
707
+
708
+ // ../../node_modules/.pnpm/@openpond+harness@0.2.6/node_modules/@openpond/harness/dist/harness-improvements.js
709
+ var BoundedTextSchema3 = z6.string().trim().min(1).max(1e5);
710
+ var MetadataSchema3 = z6.record(z6.string(), z6.unknown()).default({});
711
+ var ImprovementSafeBoundaryKindSchema = z6.enum([
712
+ "completed_tool_batch",
713
+ "before_model_step",
714
+ "turn_completed",
715
+ "turn_paused"
716
+ ]);
717
+ var ImprovementSafeBoundarySchema = z6.object({
718
+ kind: ImprovementSafeBoundaryKindSchema,
719
+ eventSequence: z6.number().int().nonnegative(),
720
+ occurredAt: ReleaseTimestampSchema
721
+ }).strict();
722
+ var ImprovementEventRefSchema = z6.object({
723
+ id: ReleaseIdSchema,
724
+ sequence: z6.number().int().nonnegative().nullable(),
725
+ contentHash: ReleaseHashSchema
726
+ }).strict();
727
+ var ImprovementObservationKindSchema = z6.enum([
728
+ "tool_failure",
729
+ "retry",
730
+ "recovery",
731
+ "validation",
732
+ "user_turn",
733
+ "reusable_success",
734
+ "completion_detour"
735
+ ]);
736
+ var ImprovementObservationStateSchema = z6.enum([
737
+ "open",
738
+ "recovered",
739
+ "terminal"
740
+ ]);
741
+ var ImprovementToolIdentitySchema = z6.object({
742
+ name: z6.string().trim().min(1).max(500),
743
+ invocationKey: ReleaseHashSchema
744
+ }).strict();
745
+ var ImprovementObservationContentSchema = z6.object({
746
+ schemaVersion: z6.literal("openpond.improvementObservation.v1"),
747
+ id: ReleaseIdSchema,
748
+ runRef: ReleaseIdSchema,
749
+ turnId: ReleaseIdSchema,
750
+ harnessRelease: ImmutableReleaseRefSchema,
751
+ overlay: HarnessOverlaySnapshotRefSchema.nullable(),
752
+ eventRefs: z6.array(ImprovementEventRefSchema).min(1).max(100),
753
+ kind: ImprovementObservationKindSchema,
754
+ state: ImprovementObservationStateSchema,
755
+ tool: ImprovementToolIdentitySchema.nullable(),
756
+ deterministicClass: z6.string().trim().min(1).max(500).nullable(),
757
+ summary: BoundedTextSchema3,
758
+ createdAt: ReleaseTimestampSchema,
759
+ metadata: MetadataSchema3
760
+ }).strict().superRefine((observation, context) => {
761
+ if (new Set(observation.eventRefs.map((reference) => reference.id)).size !== observation.eventRefs.length) {
762
+ context.addIssue({
763
+ code: "custom",
764
+ message: "observation event refs must be unique",
765
+ path: ["eventRefs"]
766
+ });
767
+ }
768
+ if (["tool_failure", "retry", "recovery", "completion_detour"].includes(observation.kind) && observation.tool === null) {
769
+ context.addIssue({
770
+ code: "custom",
771
+ message: `${observation.kind} observations require a tool identity`,
772
+ path: ["tool"]
773
+ });
774
+ }
775
+ });
776
+ var ImprovementObservationSchema = ImprovementObservationContentSchema.extend({
777
+ contentHash: ReleaseHashSchema
778
+ }).strict();
779
+ var RefinementTriggerPolicySchema = z6.object({
780
+ schemaVersion: z6.literal("openpond.refinementTriggerPolicy.v1"),
781
+ maxEstimatedCostUsd: z6.number().finite().nonnegative(),
782
+ cooldownMs: z6.number().int().nonnegative(),
783
+ maxPendingPlans: z6.number().int().min(1).max(100),
784
+ maxEvidenceEvents: z6.number().int().min(1).max(1e3),
785
+ maxProposalEdits: z6.number().int().min(1).max(1e3),
786
+ maxProposalBytes: z6.number().int().min(1).max(1e7)
787
+ }).strict();
788
+ var RefinementTriggerDecisionKindSchema = z6.enum([
789
+ "no_action",
790
+ "route_deterministically",
791
+ "queue_refiner"
792
+ ]);
793
+ var RefinementTriggerDecisionContentSchema = z6.object({
794
+ schemaVersion: z6.literal("openpond.refinementTriggerDecision.v1"),
795
+ id: ReleaseIdSchema,
796
+ runRef: ReleaseIdSchema,
797
+ turnId: ReleaseIdSchema,
798
+ harnessRelease: ImmutableReleaseRefSchema,
799
+ overlay: HarnessOverlaySnapshotRefSchema.nullable(),
800
+ observations: z6.array(ImmutableReleaseRefSchema).max(100),
801
+ decision: RefinementTriggerDecisionKindSchema,
802
+ deterministicRoute: HarnessImprovementRouteSchema.nullable(),
803
+ suggestedRoutes: z6.array(HarnessImprovementRouteSchema).max(8),
804
+ reason: BoundedTextSchema3,
805
+ deduplicationKey: ReleaseHashSchema,
806
+ policy: RefinementTriggerPolicySchema,
807
+ estimatedMaxCostUsd: z6.number().finite().nonnegative(),
808
+ pendingPlanCount: z6.number().int().nonnegative(),
809
+ boundary: ImprovementSafeBoundarySchema,
810
+ cooldownUntil: ReleaseTimestampSchema.nullable(),
811
+ createdAt: ReleaseTimestampSchema,
812
+ metadata: MetadataSchema3
813
+ }).strict().superRefine((trigger, context) => {
814
+ if (trigger.estimatedMaxCostUsd > trigger.policy.maxEstimatedCostUsd) {
815
+ context.addIssue({
816
+ code: "custom",
817
+ message: "estimated Refiner cost exceeds the trigger policy budget",
818
+ path: ["estimatedMaxCostUsd"]
819
+ });
820
+ }
821
+ if (trigger.pendingPlanCount > trigger.policy.maxPendingPlans) {
822
+ context.addIssue({
823
+ code: "custom",
824
+ message: "pending plan count exceeds the trigger policy limit",
825
+ path: ["pendingPlanCount"]
826
+ });
827
+ }
828
+ if (trigger.observations.length > trigger.policy.maxEvidenceEvents) {
829
+ context.addIssue({
830
+ code: "custom",
831
+ message: "trigger observations exceed the evidence budget",
832
+ path: ["observations"]
833
+ });
834
+ }
835
+ if (trigger.decision === "route_deterministically" && trigger.deterministicRoute === null) {
836
+ context.addIssue({
837
+ code: "custom",
838
+ message: "deterministic decisions require a route",
839
+ path: ["deterministicRoute"]
840
+ });
841
+ }
842
+ if (trigger.decision !== "route_deterministically" && trigger.deterministicRoute !== null) {
843
+ context.addIssue({
844
+ code: "custom",
845
+ message: "only deterministic decisions may declare a deterministic route",
846
+ path: ["deterministicRoute"]
847
+ });
848
+ }
849
+ if (trigger.decision === "no_action" && trigger.suggestedRoutes.length > 0) {
850
+ context.addIssue({
851
+ code: "custom",
852
+ message: "no-action decisions cannot suggest routes",
853
+ path: ["suggestedRoutes"]
854
+ });
855
+ }
856
+ if (trigger.decision !== "no_action" && trigger.observations.length === 0) {
857
+ context.addIssue({
858
+ code: "custom",
859
+ message: "actionable trigger decisions require observations",
860
+ path: ["observations"]
861
+ });
862
+ }
863
+ });
864
+ var RefinementTriggerDecisionSchema = RefinementTriggerDecisionContentSchema.extend({
865
+ contentHash: ReleaseHashSchema
866
+ }).strict();
867
+ var ImprovementRouteAuthoritySchema = z6.enum([
868
+ "runtime_service",
869
+ "refiner_model",
870
+ "human_review",
871
+ "evaluation_system",
872
+ "training_system"
873
+ ]);
874
+ var ImprovementRouteDecisionContentSchema = z6.object({
875
+ schemaVersion: z6.literal("openpond.improvementRouteDecision.v1"),
876
+ id: ReleaseIdSchema,
877
+ trigger: ImmutableReleaseRefSchema,
878
+ route: HarnessImprovementRouteSchema,
879
+ authority: ImprovementRouteAuthoritySchema,
880
+ automatic: z6.boolean(),
881
+ reason: BoundedTextSchema3,
882
+ createdAt: ReleaseTimestampSchema,
883
+ metadata: MetadataSchema3
884
+ }).strict().superRefine((decision, context) => {
885
+ if (decision.automatic && ["human_review", "evaluation_system", "training_system"].includes(decision.authority)) {
886
+ context.addIssue({
887
+ code: "custom",
888
+ message: `${decision.authority} routes cannot be marked automatic`,
889
+ path: ["automatic"]
890
+ });
891
+ }
892
+ if (decision.route === "training" && decision.automatic && decision.authority !== "training_system") {
893
+ context.addIssue({
894
+ code: "custom",
895
+ message: "automatic training routes require training-system authority",
896
+ path: ["authority"]
897
+ });
898
+ }
899
+ });
900
+ var ImprovementRouteDecisionSchema = ImprovementRouteDecisionContentSchema.extend({
901
+ contentHash: ReleaseHashSchema
902
+ }).strict();
903
+ var HarnessRefinerOutcomeContentSchema = z6.object({
904
+ schemaVersion: z6.literal("openpond.harnessRefinerOutcome.v1"),
905
+ id: ReleaseIdSchema,
906
+ trigger: ImmutableReleaseRefSchema,
907
+ decision: z6.enum(["no_action", "proposed"]),
908
+ proposal: ImmutableReleaseRefSchema.nullable(),
909
+ reason: BoundedTextSchema3,
910
+ evidenceRefs: z6.array(ImmutableReleaseRefSchema).max(100),
911
+ estimatedCostUsd: z6.number().finite().nonnegative(),
912
+ createdAt: ReleaseTimestampSchema,
913
+ metadata: MetadataSchema3
914
+ }).strict().superRefine((outcome, context) => {
915
+ if (outcome.decision === "proposed" !== (outcome.proposal !== null)) {
916
+ context.addIssue({
917
+ code: "custom",
918
+ message: "proposed Refiner outcomes require a proposal; no-action outcomes cannot include one",
919
+ path: ["proposal"]
920
+ });
921
+ }
922
+ });
923
+ var HarnessRefinerOutcomeSchema = HarnessRefinerOutcomeContentSchema.extend({
924
+ contentHash: ReleaseHashSchema
925
+ }).strict();
926
+ var ImprovementApplyDecisionSchema = z6.enum([
927
+ "applied",
928
+ "retained",
929
+ "declined",
930
+ "conflict",
931
+ "rolled_back"
932
+ ]);
933
+ var ImprovementApplyReceiptContentSchema = z6.object({
934
+ schemaVersion: z6.literal("openpond.improvementApplyReceipt.v1"),
935
+ id: ReleaseIdSchema,
936
+ proposal: ImmutableReleaseRefSchema,
937
+ beforeOverlay: HarnessOverlaySnapshotRefSchema,
938
+ afterOverlay: HarnessOverlaySnapshotRefSchema.nullable(),
939
+ decision: ImprovementApplyDecisionSchema,
940
+ boundary: ImprovementSafeBoundarySchema,
941
+ validationRefs: z6.array(ImmutableReleaseRefSchema).max(100),
942
+ outcomeEvidenceRefs: z6.array(ImprovementEventRefSchema).max(1e3),
943
+ rollbackOf: ImmutableReleaseRefSchema.nullable(),
944
+ createdAt: ReleaseTimestampSchema,
945
+ metadata: MetadataSchema3
946
+ }).strict().superRefine((receipt, context) => {
947
+ if (receipt.decision === "applied" !== (receipt.afterOverlay !== null)) {
948
+ context.addIssue({
949
+ code: "custom",
950
+ message: "applied receipts require an after-overlay; other decisions cannot include one",
951
+ path: ["afterOverlay"]
952
+ });
953
+ }
954
+ if (receipt.decision === "rolled_back" !== (receipt.rollbackOf !== null)) {
955
+ context.addIssue({
956
+ code: "custom",
957
+ message: "only rollback receipts require rollbackOf",
958
+ path: ["rollbackOf"]
959
+ });
960
+ }
961
+ });
962
+ var ImprovementApplyReceiptSchema = ImprovementApplyReceiptContentSchema.extend({
963
+ contentHash: ReleaseHashSchema
964
+ }).strict();
965
+
966
+ // ../../node_modules/.pnpm/@openpond+harness@0.2.6/node_modules/@openpond/harness/dist/refinement-lifecycle.js
967
+ import { z as z7 } from "zod";
968
+ var ShortTextSchema = z7.string().trim().min(1).max(2e3);
969
+ var BoundedTextSchema4 = z7.string().trim().min(1).max(1e5);
970
+ var HarnessRefinerOperationSchema = z7.enum(["create", "update", "delete"]);
971
+ var HarnessRefinerInternalRouteSchema = z7.enum([
972
+ "memory",
973
+ "prompt",
974
+ "skill",
975
+ "agent"
976
+ ]);
977
+ var HarnessRefinerExternalRouteSchema = z7.enum([
978
+ "runtime",
979
+ "product",
980
+ "taskset",
981
+ "training"
982
+ ]);
983
+ var HarnessRefinerActivityResultSchema = z7.enum([
984
+ "no_action",
985
+ "routed",
986
+ "applied",
987
+ "retained",
988
+ "failed"
989
+ ]);
990
+ var HarnessRefinerCritiqueStatusSchema = z7.enum([
991
+ "not_applicable",
992
+ "pending",
993
+ "passed",
994
+ "rejected",
995
+ "failed"
996
+ ]);
997
+ var HarnessRefinerValidationStatusSchema = z7.enum([
998
+ "not_applicable",
999
+ "pending",
1000
+ "passed",
1001
+ "failed"
1002
+ ]);
1003
+ var HarnessRefinerActivityReceiptContentSchema = z7.object({
1004
+ schemaVersion: z7.literal("openpond.harnessRefinerActivityReceipt.v1"),
1005
+ id: ReleaseIdSchema,
1006
+ runRef: ReleaseIdSchema,
1007
+ turnId: ReleaseIdSchema,
1008
+ result: HarnessRefinerActivityResultSchema,
1009
+ decision: z7.enum(["no_action", "route", "propose"]).nullable(),
1010
+ route: HarnessImprovementRouteSchema.nullable(),
1011
+ operation: HarnessRefinerOperationSchema.nullable(),
1012
+ target: z7.string().trim().min(1).max(2e3).nullable(),
1013
+ summary: ShortTextSchema,
1014
+ evidenceBasis: HarnessRefinerEvidenceBasisSchema.nullable(),
1015
+ critiqueStatus: HarnessRefinerCritiqueStatusSchema,
1016
+ validationStatus: HarnessRefinerValidationStatusSchema,
1017
+ trigger: ImmutableReleaseRefSchema,
1018
+ outcome: ImmutableReleaseRefSchema.nullable(),
1019
+ proposal: ImmutableReleaseRefSchema.nullable(),
1020
+ applyReceipt: ImmutableReleaseRefSchema.nullable(),
1021
+ inputHarness: ImmutableReleaseRefSchema,
1022
+ outputHarness: ImmutableReleaseRefSchema.nullable(),
1023
+ createdAt: ReleaseTimestampSchema
1024
+ }).strict().superRefine((receipt, context) => {
1025
+ const proposalResult = receipt.result === "applied" || receipt.result === "retained";
1026
+ if (receipt.result === "no_action") {
1027
+ requireFields(context, receipt, {
1028
+ decision: "no_action",
1029
+ route: null,
1030
+ operation: null,
1031
+ target: null,
1032
+ evidenceBasis: null,
1033
+ proposal: null,
1034
+ applyReceipt: null,
1035
+ outputHarness: null,
1036
+ critiqueStatus: "not_applicable",
1037
+ validationStatus: "not_applicable"
1038
+ });
1039
+ } else if (receipt.result === "routed") {
1040
+ if (receipt.decision !== "route" || !HarnessRefinerExternalRouteSchema.safeParse(receipt.route).success || receipt.operation !== null || receipt.target !== null || receipt.evidenceBasis === null || receipt.proposal !== null || receipt.applyReceipt !== null || receipt.outputHarness !== null) {
1041
+ context.addIssue({
1042
+ code: "custom",
1043
+ message: "routed activity requires an external route and evidence basis without proposal state"
1044
+ });
1045
+ }
1046
+ requireFields(context, receipt, {
1047
+ critiqueStatus: "not_applicable",
1048
+ validationStatus: "not_applicable"
1049
+ });
1050
+ } else if (proposalResult) {
1051
+ if (receipt.decision !== "propose" || !HarnessRefinerInternalRouteSchema.safeParse(receipt.route).success || receipt.operation === null || receipt.target === null || receipt.evidenceBasis === null || receipt.proposal === null || receipt.applyReceipt === null) {
1052
+ context.addIssue({
1053
+ code: "custom",
1054
+ message: "applied and retained activity requires complete proposal state"
1055
+ });
1056
+ }
1057
+ if (receipt.result === "applied" && receipt.outputHarness === null) {
1058
+ context.addIssue({
1059
+ code: "custom",
1060
+ message: "applied activity requires the advanced Harness release",
1061
+ path: ["outputHarness"]
1062
+ });
1063
+ }
1064
+ if (receipt.result === "applied" && (receipt.critiqueStatus !== "passed" || receipt.validationStatus !== "passed")) {
1065
+ context.addIssue({
1066
+ code: "custom",
1067
+ message: "applied activity requires passed critique and validation"
1068
+ });
1069
+ }
1070
+ if (receipt.result === "retained" && receipt.outputHarness !== null) {
1071
+ context.addIssue({
1072
+ code: "custom",
1073
+ message: "retained activity cannot report a new Harness release",
1074
+ path: ["outputHarness"]
1075
+ });
1076
+ }
1077
+ } else if (receipt.decision !== null || receipt.route !== null || receipt.operation !== null || receipt.target !== null || receipt.evidenceBasis !== null || receipt.outcome !== null || receipt.proposal !== null || receipt.applyReceipt !== null || receipt.outputHarness !== null) {
1078
+ context.addIssue({
1079
+ code: "custom",
1080
+ message: "failed activity cannot claim a decision, route, proposal, or release transition"
1081
+ });
1082
+ }
1083
+ if (receipt.result !== "failed" && receipt.outcome === null) {
1084
+ context.addIssue({
1085
+ code: "custom",
1086
+ message: "terminal Refiner decisions require an outcome reference",
1087
+ path: ["outcome"]
1088
+ });
1089
+ }
1090
+ });
1091
+ var HarnessRefinerActivityReceiptSchema = HarnessRefinerActivityReceiptContentSchema.extend({
1092
+ contentHash: ReleaseHashSchema
1093
+ }).strict();
1094
+ var HarnessRefinementCandidateStatusSchema = z7.enum([
1095
+ "unresolved",
1096
+ "confirmed",
1097
+ "resolved",
1098
+ "rejected",
1099
+ "expired"
1100
+ ]);
1101
+ var HarnessRefinementCandidateResolutionSchema = z7.object({
1102
+ kind: z7.enum([
1103
+ "applied_change",
1104
+ "later_success",
1105
+ "manual_rejection",
1106
+ "source_revoked",
1107
+ "expired"
1108
+ ]),
1109
+ reason: BoundedTextSchema4,
1110
+ evidenceRefs: z7.array(ImmutableReleaseRefSchema).max(1e3),
1111
+ resolvedAt: ReleaseTimestampSchema
1112
+ }).strict();
1113
+ var HarnessRefinementCandidateContentSchema = z7.object({
1114
+ schemaVersion: z7.literal("openpond.harnessRefinementCandidate.v1"),
1115
+ id: ReleaseIdSchema,
1116
+ ownerScope: HarnessReviewOwnerScopeSchema,
1117
+ workspaceRef: ReleaseIdSchema,
1118
+ fingerprint: ReleaseHashSchema,
1119
+ recurrenceFamily: z7.string().trim().min(1).max(1e3),
1120
+ statement: BoundedTextSchema4,
1121
+ status: HarnessRefinementCandidateStatusSchema,
1122
+ occurrences: z7.array(HarnessReviewEvidenceRefSchema).max(1e3),
1123
+ counterevidence: z7.array(HarnessReviewEvidenceRefSchema).max(1e3),
1124
+ sourceReviews: z7.array(ImmutableReleaseRefSchema).min(1).max(100),
1125
+ relatedHarnessReleases: z7.array(ImmutableReleaseRefSchema).max(100),
1126
+ firstSeenAt: ReleaseTimestampSchema,
1127
+ lastSeenAt: ReleaseTimestampSchema,
1128
+ lastReviewedAt: ReleaseTimestampSchema,
1129
+ expiresAt: ReleaseTimestampSchema,
1130
+ resolution: HarnessRefinementCandidateResolutionSchema.nullable(),
1131
+ createdAt: ReleaseTimestampSchema,
1132
+ updatedAt: ReleaseTimestampSchema
1133
+ }).strict().superRefine((candidate, context) => {
1134
+ requireUniqueRefs(context, candidate.occurrences, "occurrences");
1135
+ requireUniqueRefs(context, candidate.counterevidence, "counterevidence");
1136
+ requireUniqueRefs(context, candidate.sourceReviews, "sourceReviews");
1137
+ requireUniqueRefs(context, candidate.relatedHarnessReleases, "relatedHarnessReleases");
1138
+ const supportingKeys = new Set(candidate.occurrences.map((item) => item.occurrenceKey));
1139
+ if (candidate.counterevidence.some((item) => supportingKeys.has(item.occurrenceKey))) {
1140
+ context.addIssue({
1141
+ code: "custom",
1142
+ message: "supporting occurrences and counterevidence must be disjoint",
1143
+ path: ["counterevidence"]
1144
+ });
1145
+ }
1146
+ const actionable = candidate.status === "unresolved" || candidate.status === "confirmed";
1147
+ if (actionable && candidate.occurrences.length === 0) {
1148
+ context.addIssue({
1149
+ code: "custom",
1150
+ message: "actionable candidates require at least one supporting occurrence",
1151
+ path: ["occurrences"]
1152
+ });
1153
+ }
1154
+ if (actionable && [...candidate.occurrences, ...candidate.counterevidence].some((item) => item.sourcePolicy.state !== "authorized")) {
1155
+ context.addIssue({
1156
+ code: "custom",
1157
+ message: "actionable candidates may contain only currently authorized evidence",
1158
+ path: ["occurrences"]
1159
+ });
1160
+ }
1161
+ if (actionable !== (candidate.resolution === null)) {
1162
+ context.addIssue({
1163
+ code: "custom",
1164
+ message: "only resolved, rejected, or expired candidates require a resolution",
1165
+ path: ["resolution"]
1166
+ });
1167
+ }
1168
+ if (candidate.status === "expired" && candidate.resolution?.kind !== "expired") {
1169
+ context.addIssue({
1170
+ code: "custom",
1171
+ message: "expired candidates require an expired resolution",
1172
+ path: ["resolution", "kind"]
1173
+ });
1174
+ }
1175
+ if (candidate.status === "rejected" && candidate.resolution && !["manual_rejection", "source_revoked"].includes(candidate.resolution.kind)) {
1176
+ context.addIssue({
1177
+ code: "custom",
1178
+ message: "rejected candidates require a rejection or revocation resolution",
1179
+ path: ["resolution", "kind"]
1180
+ });
1181
+ }
1182
+ if (candidate.status === "resolved" && candidate.resolution && !["applied_change", "later_success"].includes(candidate.resolution.kind)) {
1183
+ context.addIssue({
1184
+ code: "custom",
1185
+ message: "resolved candidates require applied-change or later-success evidence",
1186
+ path: ["resolution", "kind"]
1187
+ });
1188
+ }
1189
+ requireChronology(context, candidate);
1190
+ });
1191
+ var HarnessRefinementCandidateSchema = HarnessRefinementCandidateContentSchema.extend({
1192
+ contentHash: ReleaseHashSchema
1193
+ }).strict();
1194
+ var HarnessRefinementCandidateLifecycleDecisionSchema = z7.enum([
1195
+ "created",
1196
+ "merged",
1197
+ "rejected",
1198
+ "expired",
1199
+ "reopened",
1200
+ "resolved"
1201
+ ]);
1202
+ var HarnessRefinementCandidateLifecycleReceiptContentSchema = z7.object({
1203
+ schemaVersion: z7.literal("openpond.harnessRefinementCandidateLifecycleReceipt.v1"),
1204
+ id: ReleaseIdSchema,
1205
+ candidateId: ReleaseIdSchema,
1206
+ decision: HarnessRefinementCandidateLifecycleDecisionSchema,
1207
+ beforeCandidate: ImmutableReleaseRefSchema.nullable(),
1208
+ afterCandidate: ImmutableReleaseRefSchema,
1209
+ review: ImmutableReleaseRefSchema,
1210
+ addedEvidence: z7.array(HarnessReviewEvidenceRefSchema).max(1e3),
1211
+ removedEvidence: z7.array(ImmutableReleaseRefSchema).max(1e3),
1212
+ reason: BoundedTextSchema4,
1213
+ createdAt: ReleaseTimestampSchema
1214
+ }).strict().superRefine((receipt, context) => {
1215
+ if (receipt.decision === "created" !== (receipt.beforeCandidate === null)) {
1216
+ context.addIssue({
1217
+ code: "custom",
1218
+ message: "only candidate creation omits the previous candidate reference",
1219
+ path: ["beforeCandidate"]
1220
+ });
1221
+ }
1222
+ if (receipt.beforeCandidate && receipt.beforeCandidate.contentHash === receipt.afterCandidate.contentHash) {
1223
+ context.addIssue({
1224
+ code: "custom",
1225
+ message: "candidate lifecycle transitions must change candidate content",
1226
+ path: ["afterCandidate"]
1227
+ });
1228
+ }
1229
+ if (["created", "reopened"].includes(receipt.decision) && receipt.addedEvidence.length === 0) {
1230
+ context.addIssue({
1231
+ code: "custom",
1232
+ message: `${receipt.decision} candidate transitions require added evidence`,
1233
+ path: ["addedEvidence"]
1234
+ });
1235
+ }
1236
+ if (receipt.addedEvidence.some((item) => item.sourcePolicy.state !== "authorized")) {
1237
+ context.addIssue({
1238
+ code: "custom",
1239
+ message: "candidate transitions may add only authorized evidence",
1240
+ path: ["addedEvidence"]
1241
+ });
1242
+ }
1243
+ requireUniqueRefs(context, receipt.addedEvidence, "addedEvidence");
1244
+ requireUniqueRefs(context, receipt.removedEvidence, "removedEvidence");
1245
+ const removedKeys = new Set(receipt.removedEvidence.map((item) => refKey(item)));
1246
+ if (receipt.addedEvidence.some((item) => removedKeys.has(refKey(item.evidence)))) {
1247
+ context.addIssue({
1248
+ code: "custom",
1249
+ message: "candidate lifecycle evidence cannot be added and removed together",
1250
+ path: ["removedEvidence"]
1251
+ });
1252
+ }
1253
+ });
1254
+ var HarnessRefinementCandidateLifecycleReceiptSchema = HarnessRefinementCandidateLifecycleReceiptContentSchema.extend({
1255
+ contentHash: ReleaseHashSchema
1256
+ }).strict();
1257
+ var HarnessCrossRunRefinementRequestContentSchema = z7.object({
1258
+ schemaVersion: z7.literal("openpond.harnessCrossRunRefinementRequest.v1"),
1259
+ id: ReleaseIdSchema,
1260
+ ownerScope: HarnessReviewOwnerScopeSchema,
1261
+ workspaceRef: ReleaseIdSchema,
1262
+ candidate: ImmutableReleaseRefSchema,
1263
+ candidateFingerprint: ReleaseHashSchema,
1264
+ review: ImmutableReleaseRefSchema,
1265
+ admittedHarness: ImmutableReleaseRefSchema,
1266
+ evidence: z7.array(HarnessReviewEvidenceRefSchema).min(1).max(1e3),
1267
+ capabilities: HarnessRefinerCapabilitiesSchema,
1268
+ deduplicationKey: ReleaseHashSchema,
1269
+ createdAt: ReleaseTimestampSchema
1270
+ }).strict().superRefine((request, context) => {
1271
+ if (request.evidence.some((item) => item.sourcePolicy.state !== "authorized")) {
1272
+ context.addIssue({
1273
+ code: "custom",
1274
+ message: "cross-run refinement requires currently authorized evidence",
1275
+ path: ["evidence"]
1276
+ });
1277
+ }
1278
+ requireUniqueRefs(context, request.evidence, "evidence");
1279
+ if (!Object.values(request.capabilities).some(Boolean)) {
1280
+ context.addIssue({
1281
+ code: "custom",
1282
+ message: "cross-run refinement requires at least one available Harness capability",
1283
+ path: ["capabilities"]
1284
+ });
1285
+ }
1286
+ const expected = harnessCrossRunRefinementDeduplicationKey(request);
1287
+ if (request.deduplicationKey !== expected) {
1288
+ context.addIssue({
1289
+ code: "custom",
1290
+ message: `cross-run refinement deduplicationKey is ${request.deduplicationKey}; expected ${expected}`,
1291
+ path: ["deduplicationKey"]
1292
+ });
1293
+ }
1294
+ });
1295
+ var HarnessCrossRunRefinementRequestSchema = HarnessCrossRunRefinementRequestContentSchema.extend({
1296
+ contentHash: ReleaseHashSchema
1297
+ }).strict();
1298
+ function harnessCrossRunRefinementDeduplicationKey(input) {
1299
+ return contentHash({
1300
+ schemaVersion: "openpond.harnessCrossRunRefinementIdentity.v1",
1301
+ workspaceRef: input.workspaceRef,
1302
+ candidateFingerprint: input.candidateFingerprint,
1303
+ admittedHarness: input.admittedHarness
1304
+ });
1305
+ }
1306
+ function requireFields(context, value, expected) {
1307
+ for (const [key, expectedValue] of Object.entries(expected)) {
1308
+ if (value[key] === expectedValue)
1309
+ continue;
1310
+ context.addIssue({
1311
+ code: "custom",
1312
+ message: `${key} must be ${String(expectedValue)}`,
1313
+ path: [key]
1314
+ });
1315
+ }
1316
+ }
1317
+ function requireUniqueRefs(context, values, path) {
1318
+ const keys = values.map((value) => refKey(value));
1319
+ if (new Set(keys).size === keys.length)
1320
+ return;
1321
+ context.addIssue({
1322
+ code: "custom",
1323
+ message: `${path} references must be unique`,
1324
+ path: [path]
1325
+ });
1326
+ }
1327
+ function refKey(value) {
1328
+ if (!value || typeof value !== "object" || Array.isArray(value))
1329
+ return String(value);
1330
+ const record = value;
1331
+ if (typeof record.occurrenceKey === "string")
1332
+ return record.occurrenceKey;
1333
+ const nested = record.evidence;
1334
+ if (nested && typeof nested === "object" && !Array.isArray(nested)) {
1335
+ const evidence = nested;
1336
+ return `${String(evidence.id)}:${String(evidence.contentHash)}`;
1337
+ }
1338
+ return `${String(record.id)}:${String(record.contentHash)}`;
1339
+ }
1340
+ function requireChronology(context, candidate) {
1341
+ const chronology = [
1342
+ ["firstSeenAt", candidate.firstSeenAt],
1343
+ ["lastSeenAt", candidate.lastSeenAt],
1344
+ ["lastReviewedAt", candidate.lastReviewedAt],
1345
+ ["updatedAt", candidate.updatedAt],
1346
+ ["expiresAt", candidate.expiresAt]
1347
+ ];
1348
+ for (let index = 1; index < chronology.length; index += 1) {
1349
+ const previous = chronology[index - 1];
1350
+ const current = chronology[index];
1351
+ if (Date.parse(previous[1]) <= Date.parse(current[1]))
1352
+ continue;
1353
+ context.addIssue({
1354
+ code: "custom",
1355
+ message: `${current[0]} must not precede ${previous[0]}`,
1356
+ path: [current[0]]
1357
+ });
1358
+ }
1359
+ if (Date.parse(candidate.createdAt) > Date.parse(candidate.updatedAt)) {
1360
+ context.addIssue({
1361
+ code: "custom",
1362
+ message: "updatedAt must not precede createdAt",
1363
+ path: ["updatedAt"]
1364
+ });
1365
+ }
1366
+ }
1367
+
1368
+ export {
1369
+ ToolDeclarationSchema,
1370
+ CapabilityRequirementSchema,
1371
+ ChatModelRefSchema
1372
+ };
1373
+ //# sourceMappingURL=chunk-EV4PKJWN.js.map