openpond-sdk 0.0.18 → 0.1.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.
package/dist/index.js CHANGED
@@ -1,3 +1,21 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
18
+
1
19
  // ../cloud/dist/sandbox/client-handles.js
2
20
  function createSandboxRuntimeNamespace(client) {
3
21
  return {
@@ -2687,13 +2705,115 @@ function requiredId(value, label) {
2687
2705
  return normalized;
2688
2706
  }
2689
2707
 
2690
- // ../../node_modules/.pnpm/@openpond+harness@0.2.5/node_modules/@openpond/harness/dist/refiner.js
2691
- import { z as z3 } from "zod";
2692
-
2693
- // ../../node_modules/.pnpm/@openpond+harness@0.2.5/node_modules/@openpond/harness/dist/common.js
2708
+ // src/learning.ts
2709
+ var learning_exports = {};
2710
+ __export(learning_exports, {
2711
+ OpenPondLearningClient: () => OpenPondLearningClient,
2712
+ OpenPondLearningError: () => OpenPondLearningError
2713
+ });
2714
+ __reExport(learning_exports, learning_star);
2715
+ __reExport(learning_exports, rewards_star);
2694
2716
  import { z } from "zod";
2717
+ import {
2718
+ LearningCommandRequestSchema,
2719
+ LearningOperationResultSchema,
2720
+ LearningReadRequestSchema,
2721
+ assertLearningRequestJson,
2722
+ learningResourceSchemas
2723
+ } from "@openpond/evals/learning";
2724
+ import { assertBoundedTaskJson } from "@openpond/evals/task-schema";
2725
+ import * as learning_star from "@openpond/evals/learning";
2726
+ import * as rewards_star from "@openpond/evals/rewards";
2727
+ var OpenPondLearningError = class extends Error {
2728
+ constructor(status, code, message, details) {
2729
+ super(message);
2730
+ this.status = status;
2731
+ this.code = code;
2732
+ this.details = details;
2733
+ this.name = "OpenPondLearningError";
2734
+ }
2735
+ status;
2736
+ code;
2737
+ details;
2738
+ };
2739
+ var OpenPondLearningClient = class {
2740
+ #options;
2741
+ constructor(options) {
2742
+ if (!options.apiKey.trim() || !options.scope.trim()) throw new Error("Learning API key and scope are required.");
2743
+ const url = new URL(options.baseUrl);
2744
+ 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.");
2745
+ this.#options = { ...options, baseUrl: url.toString().replace(/\/+$/, "") };
2746
+ }
2747
+ async command(command, options = {}) {
2748
+ assertLearningRequestJson(command);
2749
+ const request = LearningCommandRequestSchema.parse({ scope: this.#options.scope, command });
2750
+ const result = LearningOperationResultSchema.parse(await this.#request("commands", request, options));
2751
+ if (result.operationId !== command.operationId) throw new OpenPondLearningError(502, "operation_identity_mismatch", "Learning response did not match the submitted operation.", null);
2752
+ return result;
2753
+ }
2754
+ submitExample(example, options = {}) {
2755
+ return this.command({ action: "submit_example", operationId: example.idempotencyKey, example }, options);
2756
+ }
2757
+ submitFeedback(feedback, options = {}) {
2758
+ return this.command({ action: "submit_feedback", operationId: feedback.idempotencyKey, feedback }, options);
2759
+ }
2760
+ async get(kind, id, revision, options = {}) {
2761
+ const request = LearningReadRequestSchema.parse({ action: "get", scope: this.#options.scope, kind, id, ...revision === void 0 ? {} : { revision } });
2762
+ return learningResourceSchemas[kind].parse(await this.#request("read", request, options));
2763
+ }
2764
+ async list(kind, query = {}, options = {}) {
2765
+ const request = LearningReadRequestSchema.parse({ action: "list", scope: this.#options.scope, kind, ...query });
2766
+ return z.object({ items: z.array(learningResourceSchemas[kind]).max(100), nextCursor: z.string().nullable() }).strict().parse(await this.#request("read", request, options));
2767
+ }
2768
+ async #request(endpoint, body, options) {
2769
+ assertBoundedTaskJson(body, 16777216);
2770
+ const response = await (this.#options.fetch ?? globalThis.fetch)(`${this.#options.baseUrl}/v1/learning/${endpoint}`, {
2771
+ method: "POST",
2772
+ headers: { Authorization: `Bearer ${this.#options.apiKey}`, "Content-Type": "application/json", Accept: "application/json", "X-OpenPond-Team-Id": this.#options.scope },
2773
+ body: JSON.stringify(body),
2774
+ signal: options.signal,
2775
+ redirect: "error"
2776
+ });
2777
+ const payload = await readBoundedLearningResponse(response);
2778
+ if (!response.ok) {
2779
+ const error = z.object({ code: z.string().optional(), error: z.string().optional() }).passthrough().safeParse(payload);
2780
+ 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);
2781
+ }
2782
+ return payload;
2783
+ }
2784
+ };
2785
+ async function readBoundedLearningResponse(response) {
2786
+ const maximumBytes = 16777216;
2787
+ const reader = response.body?.getReader();
2788
+ if (!reader) throw new OpenPondLearningError(response.status, "empty_response", "Learning response was empty.", null);
2789
+ const decoder = new TextDecoder();
2790
+ let bytes = 0;
2791
+ let text = "";
2792
+ try {
2793
+ while (true) {
2794
+ const next = await reader.read();
2795
+ if (next.done) break;
2796
+ bytes += next.value.byteLength;
2797
+ if (bytes > maximumBytes) throw new OpenPondLearningError(response.status, "response_too_large", "Learning response exceeded 16 MiB; request a smaller page.", null);
2798
+ text += decoder.decode(next.value, { stream: true });
2799
+ }
2800
+ text += decoder.decode();
2801
+ const value = JSON.parse(text);
2802
+ assertBoundedTaskJson(value, maximumBytes);
2803
+ return value;
2804
+ } finally {
2805
+ await reader.cancel();
2806
+ reader.releaseLock();
2807
+ }
2808
+ }
2809
+
2810
+ // ../harness/dist/refiner.js
2811
+ import { z as z4 } from "zod";
2695
2812
 
2696
- // ../../node_modules/.pnpm/@openpond+harness@0.2.5/node_modules/@openpond/harness/dist/sha256.js
2813
+ // ../harness/dist/common.js
2814
+ import { z as z2 } from "zod";
2815
+
2816
+ // ../harness/dist/sha256.js
2697
2817
  var INITIAL_STATE = new Uint32Array([
2698
2818
  1779033703,
2699
2819
  3144134277,
@@ -2832,32 +2952,32 @@ function rotateRight(value, bits) {
2832
2952
  return value >>> bits | value << 32 - bits;
2833
2953
  }
2834
2954
 
2835
- // ../../node_modules/.pnpm/@openpond+harness@0.2.5/node_modules/@openpond/harness/dist/common.js
2955
+ // ../harness/dist/common.js
2836
2956
  var MAX_PORTABLE_PATH_BYTES = 2e3;
2837
2957
  var MAX_PORTABLE_ASSET_BYTES = 25e7;
2838
- var ReleaseIdSchema = z.string().trim().min(1).max(240);
2839
- var ReleaseHashSchema = z.string().regex(/^[a-f0-9]{64}$/);
2840
- var ReleaseTimestampSchema = z.string().datetime({ offset: true });
2841
- var MetadataSchema = z.record(z.string(), z.unknown()).default({});
2842
- var ImmutableReleaseRefSchema = z.object({
2958
+ var ReleaseIdSchema = z2.string().trim().min(1).max(240);
2959
+ var ReleaseHashSchema = z2.string().regex(/^[a-f0-9]{64}$/);
2960
+ var ReleaseTimestampSchema = z2.string().datetime({ offset: true });
2961
+ var MetadataSchema = z2.record(z2.string(), z2.unknown()).default({});
2962
+ var ImmutableReleaseRefSchema = z2.object({
2843
2963
  id: ReleaseIdSchema,
2844
2964
  contentHash: ReleaseHashSchema
2845
2965
  }).strict();
2846
- var ImmutableAssetRefSchema = z.object({
2966
+ var ImmutableAssetRefSchema = z2.object({
2847
2967
  id: ReleaseIdSchema,
2848
- path: z.string().trim().min(1).max(MAX_PORTABLE_PATH_BYTES).refine(safeRelativePath),
2968
+ path: z2.string().trim().min(1).max(MAX_PORTABLE_PATH_BYTES).refine(safeRelativePath),
2849
2969
  contentHash: ReleaseHashSchema,
2850
- sizeBytes: z.number().int().nonnegative().max(MAX_PORTABLE_ASSET_BYTES),
2851
- mediaType: z.string().trim().min(1).max(200),
2852
- visibility: z.enum(["policy", "verifier", "host_private"])
2970
+ sizeBytes: z2.number().int().nonnegative().max(MAX_PORTABLE_ASSET_BYTES),
2971
+ mediaType: z2.string().trim().min(1).max(200),
2972
+ visibility: z2.enum(["policy", "verifier", "host_private"])
2853
2973
  }).strict();
2854
- var ImmutableArtifactRefSchema = z.object({
2974
+ var ImmutableArtifactRefSchema = z2.object({
2855
2975
  id: ReleaseIdSchema,
2856
2976
  contentHash: ReleaseHashSchema,
2857
- mediaType: z.string().trim().min(1).max(200).nullable().default(null),
2858
- sizeBytes: z.number().int().nonnegative().max(MAX_PORTABLE_ASSET_BYTES).nullable().default(null)
2977
+ mediaType: z2.string().trim().min(1).max(200).nullable().default(null),
2978
+ sizeBytes: z2.number().int().nonnegative().max(MAX_PORTABLE_ASSET_BYTES).nullable().default(null)
2859
2979
  }).strict();
2860
- var FailureClassSchema = z.enum([
2980
+ var FailureClassSchema = z2.enum([
2861
2981
  "policy_failure",
2862
2982
  "grader_failure",
2863
2983
  "environment_failure",
@@ -2889,23 +3009,23 @@ function sortValue(value) {
2889
3009
  return Object.fromEntries(Object.entries(value).sort(([left], [right]) => left.localeCompare(right)).map(([key, child]) => [key, sortValue(child)]));
2890
3010
  }
2891
3011
 
2892
- // ../../node_modules/.pnpm/@openpond+harness@0.2.5/node_modules/@openpond/harness/dist/refiner-profiles.js
2893
- import { z as z2 } from "zod";
2894
- var RefinerProposalRouteSchema = z2.enum(["memory", "prompt", "skill", "agent"]);
2895
- var RefinerExternalRouteSchema = z2.enum(["runtime", "product", "taskset", "training"]);
2896
- var RefinerReviewInstructionSchema = z2.object({
2897
- id: z2.string().trim().min(1).max(120).regex(/^[a-z0-9][a-z0-9._-]*$/),
2898
- text: z2.string().trim().min(1).max(1e4)
3012
+ // ../harness/dist/refiner-profiles.js
3013
+ import { z as z3 } from "zod";
3014
+ var RefinerProposalRouteSchema = z3.enum(["memory", "prompt", "skill", "agent"]);
3015
+ var RefinerExternalRouteSchema = z3.enum(["runtime", "product", "taskset", "training"]);
3016
+ var RefinerReviewInstructionSchema = z3.object({
3017
+ id: z3.string().trim().min(1).max(120).regex(/^[a-z0-9][a-z0-9._-]*$/),
3018
+ text: z3.string().trim().min(1).max(1e4)
2899
3019
  }).strict();
2900
- var RefinerReviewProfileSchema = z2.object({
2901
- schemaVersion: z2.literal("openpond.refinerReviewProfile.v1"),
2902
- id: z2.string().trim().min(1).max(120).regex(/^[a-z0-9][a-z0-9._-]*$/),
2903
- version: z2.string().trim().min(1).max(120),
2904
- name: z2.string().trim().min(1).max(200),
2905
- objective: z2.string().trim().min(1).max(1e4),
2906
- instructions: z2.array(RefinerReviewInstructionSchema).max(100),
2907
- allowedProposalRoutes: z2.array(RefinerProposalRouteSchema).max(4),
2908
- allowedExternalRoutes: z2.array(RefinerExternalRouteSchema).max(4)
3020
+ var RefinerReviewProfileSchema = z3.object({
3021
+ schemaVersion: z3.literal("openpond.refinerReviewProfile.v1"),
3022
+ id: z3.string().trim().min(1).max(120).regex(/^[a-z0-9][a-z0-9._-]*$/),
3023
+ version: z3.string().trim().min(1).max(120),
3024
+ name: z3.string().trim().min(1).max(200),
3025
+ objective: z3.string().trim().min(1).max(1e4),
3026
+ instructions: z3.array(RefinerReviewInstructionSchema).max(100),
3027
+ allowedProposalRoutes: z3.array(RefinerProposalRouteSchema).max(4),
3028
+ allowedExternalRoutes: z3.array(RefinerExternalRouteSchema).max(4)
2909
3029
  }).strict().superRefine((profile, context) => {
2910
3030
  const instructionIds = profile.instructions.map((instruction) => instruction.id);
2911
3031
  if (new Set(instructionIds).size !== instructionIds.length) {
@@ -2928,10 +3048,10 @@ var DEFAULT_REFINER_REVIEW_PROFILE = {
2928
3048
  allowedProposalRoutes: ["memory", "prompt", "skill", "agent"],
2929
3049
  allowedExternalRoutes: ["runtime", "product", "taskset", "training"]
2930
3050
  };
2931
- var RefinerReleaseSchema = z2.object({
2932
- schemaVersion: z2.literal("openpond.refinerRelease.v1"),
2933
- id: z2.string().trim().min(1).max(240),
2934
- coreVersion: z2.string().trim().min(1).max(120),
3051
+ var RefinerReleaseSchema = z3.object({
3052
+ schemaVersion: z3.literal("openpond.refinerRelease.v1"),
3053
+ id: z3.string().trim().min(1).max(240),
3054
+ coreVersion: z3.string().trim().min(1).max(120),
2935
3055
  coreHash: ReleaseHashSchema,
2936
3056
  profile: RefinerReviewProfileSchema,
2937
3057
  profileHash: ReleaseHashSchema,
@@ -2939,24 +3059,24 @@ var RefinerReleaseSchema = z2.object({
2939
3059
  createdAt: ReleaseTimestampSchema,
2940
3060
  contentHash: ReleaseHashSchema
2941
3061
  }).strict();
2942
- var RefinerBindingSchema = z2.object({
2943
- schemaVersion: z2.literal("openpond.refinerBinding.v1"),
2944
- channel: z2.literal("active"),
2945
- revision: z2.number().int().nonnegative(),
3062
+ var RefinerBindingSchema = z3.object({
3063
+ schemaVersion: z3.literal("openpond.refinerBinding.v1"),
3064
+ channel: z3.literal("active"),
3065
+ revision: z3.number().int().nonnegative(),
2946
3066
  release: ImmutableReleaseRefSchema,
2947
3067
  updatedAt: ReleaseTimestampSchema
2948
3068
  }).strict();
2949
- var RefinerTransitionReceiptSchema = z2.object({
2950
- schemaVersion: z2.literal("openpond.refinerTransitionReceipt.v1"),
2951
- id: z2.string().trim().min(1).max(240),
2952
- operation: z2.enum(["initialize", "update", "activate", "rollback"]),
2953
- bindingChanged: z2.boolean(),
3069
+ var RefinerTransitionReceiptSchema = z3.object({
3070
+ schemaVersion: z3.literal("openpond.refinerTransitionReceipt.v1"),
3071
+ id: z3.string().trim().min(1).max(240),
3072
+ operation: z3.enum(["initialize", "update", "activate", "rollback"]),
3073
+ bindingChanged: z3.boolean(),
2954
3074
  previousRelease: ImmutableReleaseRefSchema.nullable(),
2955
3075
  nextRelease: ImmutableReleaseRefSchema,
2956
- actor: z2.string().trim().min(1).max(240),
2957
- reason: z2.string().trim().min(1).max(1e4),
3076
+ actor: z3.string().trim().min(1).max(240),
3077
+ reason: z3.string().trim().min(1).max(1e4),
2958
3078
  authoringSkillHash: ReleaseHashSchema.nullable(),
2959
- validation: z2.object({ valid: z2.boolean(), messages: z2.array(z2.string().max(2e3)).max(100) }).strict(),
3079
+ validation: z3.object({ valid: z3.boolean(), messages: z3.array(z3.string().max(2e3)).max(100) }).strict(),
2960
3080
  createdAt: ReleaseTimestampSchema,
2961
3081
  contentHash: ReleaseHashSchema
2962
3082
  }).strict();
@@ -2998,32 +3118,32 @@ function serializeReviewProfile(profile) {
2998
3118
  return canonicalJson(RefinerReviewProfileSchema.parse(profile));
2999
3119
  }
3000
3120
 
3001
- // ../../node_modules/.pnpm/@openpond+harness@0.2.5/node_modules/@openpond/harness/dist/refiner.js
3002
- var RefinerNoActionDecisionSchema = z3.object({
3003
- schemaVersion: z3.literal("openpond.localHarnessRefinerDecision.v1"),
3004
- decision: z3.literal("no_action"),
3005
- reason: z3.string().trim().min(1).max(1e4)
3121
+ // ../harness/dist/refiner.js
3122
+ var RefinerNoActionDecisionSchema = z4.object({
3123
+ schemaVersion: z4.literal("openpond.localHarnessRefinerDecision.v1"),
3124
+ decision: z4.literal("no_action"),
3125
+ reason: z4.string().trim().min(1).max(1e4)
3006
3126
  }).strip();
3007
- var RefinerExternalRouteDecisionSchema = z3.object({
3008
- schemaVersion: z3.literal("openpond.localHarnessRefinerDecision.v1"),
3009
- decision: z3.literal("route"),
3010
- route: z3.enum(["runtime", "product", "taskset", "training"]),
3011
- summary: z3.string().trim().min(1).max(2e3),
3012
- expectedOutcome: z3.string().trim().min(1).max(1e4),
3013
- reason: z3.string().trim().min(1).max(1e4)
3127
+ var RefinerExternalRouteDecisionSchema = z4.object({
3128
+ schemaVersion: z4.literal("openpond.localHarnessRefinerDecision.v1"),
3129
+ decision: z4.literal("route"),
3130
+ route: z4.enum(["runtime", "product", "taskset", "training"]),
3131
+ summary: z4.string().trim().min(1).max(2e3),
3132
+ expectedOutcome: z4.string().trim().min(1).max(1e4),
3133
+ reason: z4.string().trim().min(1).max(1e4)
3014
3134
  }).strip();
3015
- var RefinerProposalDecisionSchema = z3.object({
3016
- schemaVersion: z3.literal("openpond.localHarnessRefinerDecision.v1"),
3017
- decision: z3.literal("propose"),
3018
- route: z3.enum(["memory", "prompt", "skill", "agent"]),
3019
- operation: z3.enum(["create", "update", "delete"]),
3020
- target: z3.string().trim().min(1).max(2e3),
3021
- summary: z3.string().trim().min(1).max(2e3),
3022
- createContent: z3.string().min(1).max(2e4).nullable(),
3023
- find: z3.string().min(1).max(8e3).nullable(),
3024
- replace: z3.string().max(8e3).nullable(),
3025
- expectedOutcome: z3.string().trim().min(1).max(1e4),
3026
- reason: z3.string().trim().min(1).max(1e4)
3135
+ var RefinerProposalDecisionSchema = z4.object({
3136
+ schemaVersion: z4.literal("openpond.localHarnessRefinerDecision.v1"),
3137
+ decision: z4.literal("propose"),
3138
+ route: z4.enum(["memory", "prompt", "skill", "agent"]),
3139
+ operation: z4.enum(["create", "update", "delete"]),
3140
+ target: z4.string().trim().min(1).max(2e3),
3141
+ summary: z4.string().trim().min(1).max(2e3),
3142
+ createContent: z4.string().min(1).max(2e4).nullable(),
3143
+ find: z4.string().min(1).max(8e3).nullable(),
3144
+ replace: z4.string().max(8e3).nullable(),
3145
+ expectedOutcome: z4.string().trim().min(1).max(1e4),
3146
+ reason: z4.string().trim().min(1).max(1e4)
3027
3147
  }).strip().superRefine((decision, context) => {
3028
3148
  if (decision.operation === "create" && (decision.createContent === null || decision.find !== null || decision.replace !== null)) {
3029
3149
  context.addIssue({
@@ -3047,16 +3167,16 @@ var RefinerProposalDecisionSchema = z3.object({
3047
3167
  });
3048
3168
  }
3049
3169
  });
3050
- var LocalHarnessRefinerDecisionSchema = z3.discriminatedUnion("decision", [
3170
+ var LocalHarnessRefinerDecisionSchema = z4.discriminatedUnion("decision", [
3051
3171
  RefinerNoActionDecisionSchema,
3052
3172
  RefinerExternalRouteDecisionSchema,
3053
3173
  RefinerProposalDecisionSchema
3054
3174
  ]);
3055
3175
  var LocalHarnessRefinerDecisionV1Schema = LocalHarnessRefinerDecisionSchema;
3056
- var HarnessRefinerEvidenceBasisSchema = z3.object({
3057
- kind: z3.enum(["single_deterministic", "recurrent_independent"]),
3058
- supportingEvidenceIds: z3.array(z3.string().trim().min(1).max(2e3)).min(1).max(100),
3059
- counterevidence: z3.array(z3.string().trim().min(1).max(2e3)).max(20)
3176
+ var HarnessRefinerEvidenceBasisSchema = z4.object({
3177
+ kind: z4.enum(["single_deterministic", "recurrent_independent"]),
3178
+ supportingEvidenceIds: z4.array(z4.string().trim().min(1).max(2e3)).min(1).max(100),
3179
+ counterevidence: z4.array(z4.string().trim().min(1).max(2e3)).max(20)
3060
3180
  }).strict().superRefine((basis, context) => {
3061
3181
  if (new Set(basis.supportingEvidenceIds).size !== basis.supportingEvidenceIds.length) {
3062
3182
  context.addIssue({
@@ -3073,33 +3193,33 @@ var HarnessRefinerEvidenceBasisSchema = z3.object({
3073
3193
  });
3074
3194
  }
3075
3195
  });
3076
- var RefinerNoActionDecisionV2Schema = z3.object({
3077
- schemaVersion: z3.literal("openpond.localHarnessRefinerDecision.v2"),
3078
- decision: z3.literal("no_action"),
3079
- reason: z3.string().trim().min(1).max(1e4)
3196
+ var RefinerNoActionDecisionV2Schema = z4.object({
3197
+ schemaVersion: z4.literal("openpond.localHarnessRefinerDecision.v2"),
3198
+ decision: z4.literal("no_action"),
3199
+ reason: z4.string().trim().min(1).max(1e4)
3080
3200
  }).strict();
3081
- var RefinerExternalRouteDecisionV2Schema = z3.object({
3082
- schemaVersion: z3.literal("openpond.localHarnessRefinerDecision.v2"),
3083
- decision: z3.literal("route"),
3084
- route: z3.enum(["runtime", "product", "taskset", "training"]),
3085
- summary: z3.string().trim().min(1).max(2e3),
3201
+ var RefinerExternalRouteDecisionV2Schema = z4.object({
3202
+ schemaVersion: z4.literal("openpond.localHarnessRefinerDecision.v2"),
3203
+ decision: z4.literal("route"),
3204
+ route: z4.enum(["runtime", "product", "taskset", "training"]),
3205
+ summary: z4.string().trim().min(1).max(2e3),
3086
3206
  evidenceBasis: HarnessRefinerEvidenceBasisSchema,
3087
- expectedOutcome: z3.string().trim().min(1).max(1e4),
3088
- reason: z3.string().trim().min(1).max(1e4)
3207
+ expectedOutcome: z4.string().trim().min(1).max(1e4),
3208
+ reason: z4.string().trim().min(1).max(1e4)
3089
3209
  }).strict();
3090
- var RefinerProposalDecisionV2Schema = z3.object({
3091
- schemaVersion: z3.literal("openpond.localHarnessRefinerDecision.v2"),
3092
- decision: z3.literal("propose"),
3093
- route: z3.enum(["memory", "prompt", "skill", "agent"]),
3094
- operation: z3.enum(["create", "update", "delete"]),
3095
- target: z3.string().trim().min(1).max(2e3),
3096
- summary: z3.string().trim().min(1).max(2e3),
3210
+ var RefinerProposalDecisionV2Schema = z4.object({
3211
+ schemaVersion: z4.literal("openpond.localHarnessRefinerDecision.v2"),
3212
+ decision: z4.literal("propose"),
3213
+ route: z4.enum(["memory", "prompt", "skill", "agent"]),
3214
+ operation: z4.enum(["create", "update", "delete"]),
3215
+ target: z4.string().trim().min(1).max(2e3),
3216
+ summary: z4.string().trim().min(1).max(2e3),
3097
3217
  evidenceBasis: HarnessRefinerEvidenceBasisSchema,
3098
- createContent: z3.string().min(1).max(2e4).nullable(),
3099
- find: z3.string().min(1).max(8e3).nullable(),
3100
- replace: z3.string().max(8e3).nullable(),
3101
- expectedOutcome: z3.string().trim().min(1).max(1e4),
3102
- reason: z3.string().trim().min(1).max(1e4)
3218
+ createContent: z4.string().min(1).max(2e4).nullable(),
3219
+ find: z4.string().min(1).max(8e3).nullable(),
3220
+ replace: z4.string().max(8e3).nullable(),
3221
+ expectedOutcome: z4.string().trim().min(1).max(1e4),
3222
+ reason: z4.string().trim().min(1).max(1e4)
3103
3223
  }).strict().superRefine((decision, context) => {
3104
3224
  if (decision.operation === "create" && (decision.createContent === null || decision.find !== null || decision.replace !== null)) {
3105
3225
  context.addIssue({
@@ -3123,122 +3243,122 @@ var RefinerProposalDecisionV2Schema = z3.object({
3123
3243
  });
3124
3244
  }
3125
3245
  });
3126
- var LocalHarnessRefinerDecisionV2Schema = z3.discriminatedUnion("decision", [
3246
+ var LocalHarnessRefinerDecisionV2Schema = z4.discriminatedUnion("decision", [
3127
3247
  RefinerNoActionDecisionV2Schema,
3128
3248
  RefinerExternalRouteDecisionV2Schema,
3129
3249
  RefinerProposalDecisionV2Schema
3130
3250
  ]);
3131
- var LocalHarnessRefinerDecisionAnySchema = z3.union([
3251
+ var LocalHarnessRefinerDecisionAnySchema = z4.union([
3132
3252
  LocalHarnessRefinerDecisionV1Schema,
3133
3253
  LocalHarnessRefinerDecisionV2Schema
3134
3254
  ]);
3135
- var HarnessRefinerCapabilitiesSchema = z3.object({
3136
- memory: z3.boolean(),
3137
- prompt: z3.boolean(),
3138
- skill: z3.boolean(),
3139
- agent: z3.boolean()
3255
+ var HarnessRefinerCapabilitiesSchema = z4.object({
3256
+ memory: z4.boolean(),
3257
+ prompt: z4.boolean(),
3258
+ skill: z4.boolean(),
3259
+ agent: z4.boolean()
3140
3260
  }).strict();
3141
- var SourceKindSchema = z3.enum(["memory", "instruction", "skill", "agent"]);
3142
- var RefinerSourceFileSchema = z3.object({
3143
- path: z3.string().trim().min(1).max(2e3),
3261
+ var SourceKindSchema = z4.enum(["memory", "instruction", "skill", "agent"]);
3262
+ var RefinerSourceFileSchema = z4.object({
3263
+ path: z4.string().trim().min(1).max(2e3),
3144
3264
  kind: SourceKindSchema,
3145
- content: z3.string().max(6e4),
3146
- loaded: z3.boolean()
3265
+ content: z4.string().max(6e4),
3266
+ loaded: z4.boolean()
3147
3267
  }).strict();
3148
- var RefinerSourceCatalogEntrySchema = z3.object({
3149
- path: z3.string().trim().min(1).max(2e3),
3268
+ var RefinerSourceCatalogEntrySchema = z4.object({
3269
+ path: z4.string().trim().min(1).max(2e3),
3150
3270
  kind: SourceKindSchema,
3151
- loaded: z3.boolean()
3271
+ loaded: z4.boolean()
3152
3272
  }).strict();
3153
- var LocalHarnessRefinerEvidenceSchema = z3.object({
3273
+ var LocalHarnessRefinerEvidenceSchema = z4.object({
3154
3274
  capabilities: HarnessRefinerCapabilitiesSchema,
3155
- trigger: z3.record(z3.string(), z3.unknown()),
3156
- observations: z3.array(z3.record(z3.string(), z3.unknown())).max(20),
3157
- admissibleEvidenceIds: z3.array(z3.string().trim().min(1).max(2e3)).max(1e4),
3158
- reviewPacket: z3.object({
3159
- currentTurn: z3.object({
3160
- id: z3.string().trim().min(1).max(2e3),
3161
- status: z3.string().trim().min(1).max(100).nullable(),
3162
- error: z3.string().max(2100).nullable(),
3163
- prompt: z3.string().max(8100).nullable(),
3164
- assistantOutput: z3.string().max(8100).nullable(),
3165
- assistantOutputLinkCount: z3.number().int().nonnegative()
3275
+ trigger: z4.record(z4.string(), z4.unknown()),
3276
+ observations: z4.array(z4.record(z4.string(), z4.unknown())).max(20),
3277
+ admissibleEvidenceIds: z4.array(z4.string().trim().min(1).max(2e3)).max(1e4),
3278
+ reviewPacket: z4.object({
3279
+ currentTurn: z4.object({
3280
+ id: z4.string().trim().min(1).max(2e3),
3281
+ status: z4.string().trim().min(1).max(100).nullable(),
3282
+ error: z4.string().max(2100).nullable(),
3283
+ prompt: z4.string().max(8100).nullable(),
3284
+ assistantOutput: z4.string().max(8100).nullable(),
3285
+ assistantOutputLinkCount: z4.number().int().nonnegative()
3166
3286
  }).strict(),
3167
- priorConversation: z3.array(z3.object({
3168
- turnId: z3.string().trim().min(1).max(2e3),
3169
- status: z3.string().trim().min(1).max(100).nullable(),
3170
- prompt: z3.string().max(3100).nullable(),
3171
- assistantOutput: z3.string().max(3100).nullable()
3287
+ priorConversation: z4.array(z4.object({
3288
+ turnId: z4.string().trim().min(1).max(2e3),
3289
+ status: z4.string().trim().min(1).max(100).nullable(),
3290
+ prompt: z4.string().max(3100).nullable(),
3291
+ assistantOutput: z4.string().max(3100).nullable()
3172
3292
  }).strict()).max(3),
3173
- timeline: z3.array(z3.record(z3.string(), z3.unknown())).max(60),
3174
- artifacts: z3.array(z3.record(z3.string(), z3.unknown())).max(30),
3175
- artifactDiagnostics: z3.array(z3.record(z3.string(), z3.unknown())).max(20),
3176
- executionProfile: z3.object({
3177
- modelRequestCount: z3.number().int().nonnegative(),
3178
- failedModelRequestCount: z3.number().int().nonnegative(),
3179
- promptTokens: z3.number().int().nonnegative(),
3180
- completionTokens: z3.number().int().nonnegative(),
3181
- totalTokens: z3.number().int().nonnegative(),
3182
- toolFailureCount: z3.number().int().nonnegative(),
3183
- retryCount: z3.number().int().nonnegative(),
3184
- recoveryCount: z3.number().int().nonnegative()
3293
+ timeline: z4.array(z4.record(z4.string(), z4.unknown())).max(60),
3294
+ artifacts: z4.array(z4.record(z4.string(), z4.unknown())).max(30),
3295
+ artifactDiagnostics: z4.array(z4.record(z4.string(), z4.unknown())).max(20),
3296
+ executionProfile: z4.object({
3297
+ modelRequestCount: z4.number().int().nonnegative(),
3298
+ failedModelRequestCount: z4.number().int().nonnegative(),
3299
+ promptTokens: z4.number().int().nonnegative(),
3300
+ completionTokens: z4.number().int().nonnegative(),
3301
+ totalTokens: z4.number().int().nonnegative(),
3302
+ toolFailureCount: z4.number().int().nonnegative(),
3303
+ retryCount: z4.number().int().nonnegative(),
3304
+ recoveryCount: z4.number().int().nonnegative()
3185
3305
  }).strict(),
3186
- priorIncidents: z3.array(z3.record(z3.string(), z3.unknown())).max(3),
3187
- truncation: z3.object({
3188
- timelineEventCount: z3.number().int().nonnegative(),
3189
- includedTimelineEventCount: z3.number().int().nonnegative(),
3190
- timelineTruncated: z3.boolean()
3306
+ priorIncidents: z4.array(z4.record(z4.string(), z4.unknown())).max(3),
3307
+ truncation: z4.object({
3308
+ timelineEventCount: z4.number().int().nonnegative(),
3309
+ includedTimelineEventCount: z4.number().int().nonnegative(),
3310
+ timelineTruncated: z4.boolean()
3191
3311
  }).strict()
3192
3312
  }).strict(),
3193
- runtimeActivation: z3.object({
3313
+ runtimeActivation: z4.object({
3194
3314
  admittedRelease: ImmutableReleaseRefSchema,
3195
3315
  currentRelease: ImmutableReleaseRefSchema,
3196
- rebasedOntoCurrent: z3.boolean(),
3197
- admittedSourceFiles: z3.array(RefinerSourceFileSchema).max(100),
3198
- admittedSourceCatalog: z3.array(RefinerSourceCatalogEntrySchema).max(1e3)
3316
+ rebasedOntoCurrent: z4.boolean(),
3317
+ admittedSourceFiles: z4.array(RefinerSourceFileSchema).max(100),
3318
+ admittedSourceCatalog: z4.array(RefinerSourceCatalogEntrySchema).max(1e3)
3199
3319
  }).strict(),
3200
- sourceFiles: z3.array(RefinerSourceFileSchema).max(100),
3201
- sourceCatalog: z3.array(RefinerSourceCatalogEntrySchema).max(1e3),
3202
- additionalEvidence: z3.unknown().nullable().optional()
3320
+ sourceFiles: z4.array(RefinerSourceFileSchema).max(100),
3321
+ sourceCatalog: z4.array(RefinerSourceCatalogEntrySchema).max(1e3),
3322
+ additionalEvidence: z4.unknown().nullable().optional()
3203
3323
  }).strict();
3204
3324
  var REFINER_CORE_VERSION = "openpond.refinerCore.v2";
3205
- var OverlayRefSchema = z3.object({
3206
- id: z3.string().trim().min(1).max(240),
3207
- revision: z3.number().int().nonnegative(),
3325
+ var OverlayRefSchema = z4.object({
3326
+ id: z4.string().trim().min(1).max(240),
3327
+ revision: z4.number().int().nonnegative(),
3208
3328
  contentHash: ReleaseHashSchema
3209
3329
  }).strict();
3210
- var HostedHarnessRefinerRequestSchema = z3.object({
3211
- schemaVersion: z3.literal("openpond.hostedHarnessRefinerRequest.v2"),
3212
- requestId: z3.string().trim().min(1).max(240),
3213
- idempotencyKey: z3.string().trim().min(1).max(240),
3330
+ var HostedHarnessRefinerRequestSchema = z4.object({
3331
+ schemaVersion: z4.literal("openpond.hostedHarnessRefinerRequest.v2"),
3332
+ requestId: z4.string().trim().min(1).max(240),
3333
+ idempotencyKey: z4.string().trim().min(1).max(240),
3214
3334
  evidenceHash: ReleaseHashSchema,
3215
- harness: z3.object({
3335
+ harness: z4.object({
3216
3336
  admittedRelease: ImmutableReleaseRefSchema,
3217
3337
  currentRelease: ImmutableReleaseRefSchema,
3218
3338
  overlay: OverlayRefSchema,
3219
- workspace: z3.object({
3220
- id: z3.string().trim().min(1).max(240),
3221
- revision: z3.number().int().nonnegative(),
3339
+ workspace: z4.object({
3340
+ id: z4.string().trim().min(1).max(240),
3341
+ revision: z4.number().int().nonnegative(),
3222
3342
  sourceRevision: ReleaseHashSchema,
3223
- channelRevision: z3.number().int().nonnegative()
3343
+ channelRevision: z4.number().int().nonnegative()
3224
3344
  }).strict(),
3225
3345
  capabilities: HarnessRefinerCapabilitiesSchema
3226
3346
  }).strict(),
3227
3347
  evidence: LocalHarnessRefinerEvidenceSchema
3228
3348
  }).strict();
3229
- var HostedHarnessRefinerUsageSchema = z3.object({
3230
- promptTokens: z3.number().int().nonnegative(),
3231
- completionTokens: z3.number().int().nonnegative(),
3232
- totalTokens: z3.number().int().nonnegative()
3349
+ var HostedHarnessRefinerUsageSchema = z4.object({
3350
+ promptTokens: z4.number().int().nonnegative(),
3351
+ completionTokens: z4.number().int().nonnegative(),
3352
+ totalTokens: z4.number().int().nonnegative()
3233
3353
  }).strict();
3234
- var HostedHarnessRefinerResponseSchema = z3.object({
3235
- schemaVersion: z3.literal("openpond.hostedHarnessRefinerResponse.v2"),
3236
- requestId: z3.string().trim().min(1).max(240),
3354
+ var HostedHarnessRefinerResponseSchema = z4.object({
3355
+ schemaVersion: z4.literal("openpond.hostedHarnessRefinerResponse.v2"),
3356
+ requestId: z4.string().trim().min(1).max(240),
3237
3357
  evidenceHash: ReleaseHashSchema,
3238
3358
  admittedRelease: ImmutableReleaseRefSchema,
3239
3359
  currentRelease: ImmutableReleaseRefSchema,
3240
3360
  decision: LocalHarnessRefinerDecisionV2Schema,
3241
- serviceRevision: z3.string().trim().min(1).max(240),
3361
+ serviceRevision: z4.string().trim().min(1).max(240),
3242
3362
  usage: HostedHarnessRefinerUsageSchema
3243
3363
  }).strict();
3244
3364
 
@@ -3257,10 +3377,12 @@ var OpenPondClient = class {
3257
3377
  workflows;
3258
3378
  actions;
3259
3379
  profileActions;
3380
+ learning;
3260
3381
  constructor(options) {
3261
3382
  const apiKey = options.apiKey.trim();
3262
3383
  if (!apiKey) throw new Error("OpenPond API key is required");
3263
3384
  const apiBaseUrl = options.baseUrl?.trim() || "https://api.openpond.ai";
3385
+ this.learning = (scope) => new OpenPondLearningClient({ apiKey, baseUrl: apiBaseUrl, scope });
3264
3386
  this.sandboxes = createOpenPondSandboxClient({
3265
3387
  apiKey,
3266
3388
  baseUrl: apiBaseUrl,
@@ -3284,6 +3406,8 @@ export {
3284
3406
  DEFAULT_REFINER_REVIEW_PROFILE,
3285
3407
  OpenPondApiError,
3286
3408
  OpenPondClient,
3409
+ OpenPondLearningClient,
3410
+ OpenPondLearningError,
3287
3411
  OpenPondProfileActionsClient,
3288
3412
  OpenPondProjectActionsClient,
3289
3413
  OpenPondSandboxClient,