@holoscript/core 7.0.0 → 8.0.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/README.md +2 -2
- package/bin/holoscript.cjs +3 -0
- package/dist/GLTFPipeline-276GE64O.js +16 -0
- package/dist/GLTFPipeline-M7WSSJED.cjs +37 -0
- package/dist/HoloScriptPlusParser-7FBIFUFC.js +693 -0
- package/dist/HoloScriptPlusParser-A2W7OCN2.cjs +698 -0
- package/dist/HoloScriptPlusParser-F2Z56FJR.js +10 -0
- package/dist/HoloScriptPlusParser-WKHRIH6T.cjs +27 -0
- package/dist/HoloScriptRuntime-3URVTKPJ.js +10 -0
- package/dist/HoloScriptRuntime-SXEAEU2N.cjs +19 -0
- package/dist/USDZExporter-3FWJ25JI.cjs +1037 -0
- package/dist/USDZExporter-D2HQLQYK.js +1035 -0
- package/dist/agents/index.cjs +19 -0
- package/dist/agents/index.d.ts +100 -0
- package/dist/agents/index.js +17 -0
- package/dist/chunk-23J755AR.js +1046 -0
- package/dist/chunk-253GBQZY.cjs +627 -0
- package/dist/chunk-25IQCHTO.cjs +781 -0
- package/dist/chunk-2BSMSUCE.js +1941 -0
- package/dist/chunk-2M2DPHKB.js +762 -0
- package/dist/chunk-2YSNA2F2.cjs +1274 -0
- package/dist/chunk-3AO425MZ.cjs +886 -0
- package/dist/chunk-3FOKASKO.cjs +348 -0
- package/dist/chunk-3HYYMEXI.cjs +56578 -0
- package/dist/chunk-3NFFOWGG.js +4287 -0
- package/dist/chunk-3WZEJHUQ.cjs +116 -0
- package/dist/chunk-4C57PR42.js +468 -0
- package/dist/chunk-4N4SXXWF.js +769 -0
- package/dist/chunk-4PDEPEQW.cjs +41 -0
- package/dist/chunk-4R6SBXDB.js +45 -0
- package/dist/chunk-4V2E7U7Q.cjs +2015 -0
- package/dist/chunk-5FSKKMR7.cjs +2092 -0
- package/dist/chunk-5GLCTO44.js +161 -0
- package/dist/chunk-5JEU52DW.js +382 -0
- package/dist/chunk-5S7RKFGR.cjs +446 -0
- package/dist/chunk-5WUNN6ZN.cjs +428 -0
- package/dist/chunk-62FBK3B7.js +70 -0
- package/dist/chunk-6CTRH7HT.cjs +1985 -0
- package/dist/chunk-6DPSFNJB.cjs +847 -0
- package/dist/chunk-6EX3I5P4.cjs +130 -0
- package/dist/chunk-73FELZVJ.cjs +611 -0
- package/dist/chunk-7CUEMLDZ.cjs +6445 -0
- package/dist/chunk-7HIASF7S.cjs +814 -0
- package/dist/chunk-A6KINLZJ.js +236 -0
- package/dist/chunk-AIA52I7T.cjs +543 -0
- package/dist/chunk-ANXZFVY2.js +113 -0
- package/dist/chunk-AYBXB26F.js +2176 -0
- package/dist/chunk-B4TFTDG4.js +449 -0
- package/dist/chunk-BE4UJCQT.js +623 -0
- package/dist/chunk-BRQJKJGT.cjs +20 -0
- package/dist/chunk-C2A5DUMF.cjs +689 -0
- package/dist/chunk-C37BHB7N.cjs +636 -0
- package/dist/chunk-CBJY23VL.js +126 -0
- package/dist/chunk-CIWWXYHZ.cjs +50 -0
- package/dist/chunk-CXFDRBQU.cjs +672 -0
- package/dist/chunk-D54CNIAJ.cjs +413 -0
- package/dist/chunk-DAJXW4KX.js +725 -0
- package/dist/chunk-DTGBOSEM.cjs +319 -0
- package/dist/chunk-E7JP3BS3.cjs +61 -0
- package/dist/chunk-EKBKLK7P.js +1169 -0
- package/dist/chunk-EKYL4PE3.cjs +404 -0
- package/dist/chunk-EUDQTK7N.cjs +4310 -0
- package/dist/chunk-EXKSFGSX.cjs +274 -0
- package/dist/chunk-EXUP2BUM.cjs +1173 -0
- package/dist/chunk-F43YAA34.js +623 -0
- package/dist/chunk-FDSGHPAK.js +130 -0
- package/dist/chunk-FEWUHQNM.cjs +144 -0
- package/dist/chunk-FGGJQRLZ.js +270 -0
- package/dist/chunk-FHP6LXJS.js +415 -0
- package/dist/chunk-FJPADH77.cjs +666 -0
- package/dist/chunk-FYSPZT4V.cjs +169 -0
- package/dist/chunk-GIOYPNTH.js +5575 -0
- package/dist/chunk-GJNCFRJU.cjs +125 -0
- package/dist/chunk-GMP623FG.cjs +1508 -0
- package/dist/chunk-GQHQOPXZ.cjs +5580 -0
- package/dist/chunk-GQT4TYKY.cjs +4381 -0
- package/dist/chunk-GTU2Z2WW.cjs +262 -0
- package/dist/chunk-GYZE55MO.js +2007 -0
- package/dist/chunk-GZG4KA4E.js +529 -0
- package/dist/chunk-H652NHX5.js +600 -0
- package/dist/chunk-HCCQLAA4.cjs +74 -0
- package/dist/chunk-HINXWAOD.cjs +1049 -0
- package/dist/chunk-HYNTS5CP.js +422 -0
- package/dist/chunk-HZSPDCXV.cjs +457 -0
- package/dist/chunk-HZTDET3N.js +1399 -0
- package/dist/chunk-I6XZ5DZF.cjs +488 -0
- package/dist/chunk-ILRBGFVD.cjs +72 -0
- package/dist/chunk-IPWSXCCN.js +1183 -0
- package/dist/chunk-IUTY5WQ2.cjs +424 -0
- package/dist/chunk-IVSZDECV.js +882 -0
- package/dist/chunk-IVY74O6C.js +247 -0
- package/dist/chunk-IZM5VQZD.js +714 -0
- package/dist/chunk-J32ZJZJH.js +554 -0
- package/dist/chunk-J6M4FPK5.js +421 -0
- package/dist/chunk-JC5YBPSF.cjs +984 -0
- package/dist/chunk-JCLBKPMX.js +3813 -0
- package/dist/chunk-JD7CIZ33.js +1949 -0
- package/dist/chunk-JIYN45TV.cjs +2525 -0
- package/dist/chunk-JJBE3TIH.cjs +1189 -0
- package/dist/chunk-JX7YL6ZE.js +2252 -0
- package/dist/chunk-K4VVR7CN.cjs +2433 -0
- package/dist/chunk-KEFNV2WM.cjs +2257 -0
- package/dist/chunk-KH4CNH66.cjs +424 -0
- package/dist/chunk-KJLB4OPV.js +5731 -0
- package/dist/chunk-KKFZ3B6J.cjs +557 -0
- package/dist/chunk-KKP7JKN4.cjs +6002 -0
- package/dist/chunk-KPJL34Y7.cjs +186 -0
- package/dist/chunk-KQCN6AKJ.cjs +3042 -0
- package/dist/chunk-KVRSTFNH.cjs +72 -0
- package/dist/chunk-LICPB5HZ.cjs +1409 -0
- package/dist/chunk-LM2VU56C.cjs +37 -0
- package/dist/chunk-M56JSP4A.js +400 -0
- package/dist/chunk-MBOOR7X4.js +18 -0
- package/dist/chunk-MGE5Z4GS.js +608 -0
- package/dist/chunk-MXFUTKCO.js +56 -0
- package/dist/chunk-MYY4PMWX.cjs +264 -0
- package/dist/chunk-N75IH2HY.js +258 -0
- package/dist/chunk-NBMHU6SW.js +669 -0
- package/dist/chunk-NG77ATEW.cjs +778 -0
- package/dist/chunk-NGKREZ36.js +6384 -0
- package/dist/chunk-NHWSN2SD.cjs +718 -0
- package/dist/chunk-NV4VMVXU.js +421 -0
- package/dist/chunk-NW5G5FBQ.js +215 -0
- package/dist/chunk-NXZFOPVD.cjs +5737 -0
- package/dist/chunk-OBIYPYYS.cjs +1993 -0
- package/dist/chunk-OIQYIIO3.cjs +473 -0
- package/dist/chunk-OL46QLBJ.js +61 -0
- package/dist/chunk-OMXII44L.js +5386 -0
- package/dist/chunk-OR4Q2BGL.cjs +759 -0
- package/dist/chunk-OSYNRVOV.cjs +243 -0
- package/dist/chunk-PGANYCAG.cjs +220 -0
- package/dist/chunk-PHENW4MQ.js +65 -0
- package/dist/chunk-PHVRG4I2.js +844 -0
- package/dist/chunk-Q56TT7IL.js +483 -0
- package/dist/chunk-QPOQ7VPI.js +1491 -0
- package/dist/chunk-QPSKHBJP.js +5963 -0
- package/dist/chunk-QXH7QDSZ.js +1989 -0
- package/dist/chunk-R75BSDH7.cjs +50 -0
- package/dist/chunk-RARB3MBR.js +207 -0
- package/dist/chunk-RVBHAXFG.js +56160 -0
- package/dist/chunk-S3MDHNKB.cjs +490 -0
- package/dist/chunk-S4W6Z2MN.js +2426 -0
- package/dist/chunk-S6YWHCKV.cjs +410 -0
- package/dist/chunk-SIEXCILW.js +229 -0
- package/dist/chunk-SJBGLS25.cjs +2196 -0
- package/dist/chunk-SLU6UPJI.cjs +410 -0
- package/dist/chunk-SMIWS6DE.cjs +212 -0
- package/dist/chunk-T2QCTZMO.js +811 -0
- package/dist/chunk-T5J7ZKP3.cjs +4885 -0
- package/dist/chunk-TDCNJHWO.js +341 -0
- package/dist/chunk-TG7O4WBC.js +406 -0
- package/dist/chunk-THCK6ECW.js +2085 -0
- package/dist/chunk-TJHVSBP2.js +439 -0
- package/dist/chunk-TVHSPJ4N.cjs +606 -0
- package/dist/chunk-U44IKGG7.cjs +5390 -0
- package/dist/chunk-UJXISJBN.js +487 -0
- package/dist/chunk-UM6C3CGK.js +4375 -0
- package/dist/chunk-UMABK6SI.js +686 -0
- package/dist/chunk-UOIGFQXC.cjs +9750 -0
- package/dist/chunk-URG2SJLK.js +2521 -0
- package/dist/chunk-V6MKC2FZ.js +979 -0
- package/dist/chunk-VECQYRXL.js +474 -0
- package/dist/chunk-VJ3L7CHT.cjs +169 -0
- package/dist/chunk-VMLKSV26.js +1216 -0
- package/dist/chunk-VVKVQZI6.js +55 -0
- package/dist/chunk-W6RW64BB.cjs +1219 -0
- package/dist/chunk-W7VDOASB.cjs +639 -0
- package/dist/chunk-WDT3JTGM.cjs +483 -0
- package/dist/chunk-WJIHFLMJ.js +404 -0
- package/dist/chunk-WKX5AMOY.js +309 -0
- package/dist/chunk-WNNE3PO3.js +34 -0
- package/dist/chunk-WRKUDAZJ.js +3038 -0
- package/dist/chunk-WRLUBRKS.cjs +1943 -0
- package/dist/chunk-WRNEH5MO.js +3169 -0
- package/dist/chunk-WRWEX5ZF.js +658 -0
- package/dist/chunk-X3GJPRVK.cjs +3246 -0
- package/dist/chunk-XHIV6326.cjs +793 -0
- package/dist/chunk-XIVIE43A.cjs +729 -0
- package/dist/chunk-XJAN7CZG.cjs +432 -0
- package/dist/chunk-XKTPFXGA.js +164 -0
- package/dist/chunk-XL6INWKT.js +121 -0
- package/dist/chunk-XSFNHP2E.js +632 -0
- package/dist/chunk-XT6JY5W5.js +9684 -0
- package/dist/chunk-XUILI4KB.cjs +430 -0
- package/dist/chunk-XUUVDHIF.cjs +3962 -0
- package/dist/chunk-YF2I3MV3.js +46 -0
- package/dist/chunk-YIMN575O.js +4847 -0
- package/dist/chunk-YIVFJNYV.js +176 -0
- package/dist/chunk-YKGPCZEE.cjs +237 -0
- package/dist/chunk-YN6V7R3L.cjs +327 -0
- package/dist/chunk-YQELFNJV.js +39 -0
- package/dist/chunk-YYXH45E2.js +426 -0
- package/dist/chunk-ZBQXLH2L.js +756 -0
- package/dist/chunk-ZDSYWBIE.cjs +69 -0
- package/dist/chunk-ZU7NIRT6.js +325 -0
- package/dist/chunk-ZZ7RO2UQ.js +1243 -0
- package/dist/chunk-ZZEI7MV4.js +778 -0
- package/dist/cli/holoscript-runner.cjs +2255 -0
- package/dist/cli/holoscript-runner.js +2230 -0
- package/dist/codebase/index.cjs +336 -0
- package/dist/codebase/index.js +331 -0
- package/dist/compiler/agent-inference.cjs +31 -0
- package/dist/compiler/agent-inference.js +8 -0
- package/dist/compiler/android-xr.cjs +24 -0
- package/dist/compiler/android-xr.js +14 -0
- package/dist/compiler/android.cjs +24 -0
- package/dist/compiler/android.js +14 -0
- package/dist/compiler/ar.cjs +23 -0
- package/dist/compiler/ar.js +11 -0
- package/dist/compiler/babylon.cjs +21 -0
- package/dist/compiler/babylon.js +15 -0
- package/dist/compiler/business-quest.cjs +43 -0
- package/dist/compiler/business-quest.js +4 -0
- package/dist/compiler/coco.cjs +27 -0
- package/dist/compiler/coco.js +4 -0
- package/dist/compiler/context.cjs +25 -0
- package/dist/compiler/context.d.ts +28 -0
- package/dist/compiler/context.js +8 -0
- package/dist/compiler/domain-block-utils.cjs +605 -0
- package/dist/compiler/domain-block-utils.js +11 -0
- package/dist/compiler/dtdl.cjs +27 -0
- package/dist/compiler/dtdl.js +11 -0
- package/dist/compiler/gltf-pipeline.cjs +39 -0
- package/dist/compiler/gltf-pipeline.js +4 -0
- package/dist/compiler/godot.cjs +18 -0
- package/dist/compiler/godot.js +12 -0
- package/dist/compiler/incremental.cjs +34 -0
- package/dist/compiler/incremental.js +9 -0
- package/dist/compiler/index.cjs +5860 -0
- package/dist/compiler/index.d.ts +322 -21
- package/dist/compiler/index.js +5525 -0
- package/dist/compiler/ios.cjs +23 -0
- package/dist/compiler/ios.js +13 -0
- package/dist/compiler/llm-provider-capabilities.cjs +25 -0
- package/dist/compiler/llm-provider-capabilities.d.ts +43 -0
- package/dist/compiler/llm-provider-capabilities.js +8 -0
- package/dist/compiler/multi-layer.cjs +24 -0
- package/dist/compiler/multi-layer.js +15 -0
- package/dist/compiler/nodetoy.cjs +23 -0
- package/dist/compiler/nodetoy.js +4 -0
- package/dist/compiler/openxr.cjs +19 -0
- package/dist/compiler/openxr.js +13 -0
- package/dist/compiler/playcanvas.cjs +19 -0
- package/dist/compiler/playcanvas.js +13 -0
- package/dist/compiler/r3f.cjs +38 -0
- package/dist/compiler/r3f.d.ts +22 -0
- package/dist/compiler/r3f.js +16 -0
- package/dist/compiler/remotion.cjs +23 -0
- package/dist/compiler/remotion.js +4 -0
- package/dist/compiler/reproducibility.cjs +39 -0
- package/dist/compiler/reproducibility.js +4 -0
- package/dist/compiler/sdf.cjs +24 -0
- package/dist/compiler/sdf.js +12 -0
- package/dist/compiler/semantic-scene.cjs +31 -0
- package/dist/compiler/semantic-scene.js +4 -0
- package/dist/compiler/state.cjs +21 -0
- package/dist/compiler/state.js +11 -0
- package/dist/compiler/trait-composition.cjs +30 -0
- package/dist/compiler/trait-composition.js +9 -0
- package/dist/compiler/unity.cjs +19 -0
- package/dist/compiler/unity.js +13 -0
- package/dist/compiler/unreal.cjs +23 -0
- package/dist/compiler/unreal.js +13 -0
- package/dist/compiler/urdf.cjs +52 -0
- package/dist/compiler/urdf.js +12 -0
- package/dist/compiler/usd-physics.cjs +26 -0
- package/dist/compiler/usd-physics.js +9 -0
- package/dist/compiler/visionos.cjs +19 -0
- package/dist/compiler/visionos.js +13 -0
- package/dist/compiler/vrchat.cjs +22 -0
- package/dist/compiler/vrchat.js +12 -0
- package/dist/compiler/vrr.cjs +24 -0
- package/dist/compiler/vrr.js +12 -0
- package/dist/compiler/wasm.cjs +36 -0
- package/dist/compiler/wasm.js +12 -0
- package/dist/compiler/webgpu.cjs +18 -0
- package/dist/compiler/webgpu.js +12 -0
- package/dist/coordinators/index.cjs +1266 -0
- package/dist/coordinators/index.d.ts +72 -1
- package/dist/coordinators/index.js +1259 -0
- package/dist/debugger.cjs +24 -0
- package/dist/debugger.js +11 -0
- package/dist/entries/interop.cjs +64 -0
- package/dist/entries/interop.js +7 -0
- package/dist/entries/scripting.cjs +55 -0
- package/dist/entries/scripting.js +10 -0
- package/dist/hololand/index.cjs +146 -0
- package/dist/hololand/index.d.ts +70 -0
- package/dist/hololand/index.js +5 -0
- package/dist/index.cjs +43233 -0
- package/dist/index.d.ts +976 -21
- package/dist/index.js +39995 -0
- package/dist/math/tropical-spmv.cjs +45 -0
- package/dist/math/tropical-spmv.js +4 -0
- package/dist/math/vec3.cjs +57 -0
- package/dist/math/vec3.js +4 -0
- package/dist/ml-dsa-FSKBTE3W.cjs +1265 -0
- package/dist/ml-dsa-Z7JDKW4L.js +1265 -0
- package/dist/paper-0c-spike/index.cjs +150 -0
- package/dist/paper-0c-spike/index.js +141 -0
- package/dist/parser.cjs +61 -0
- package/dist/parser.d.ts +11 -0
- package/dist/parser.js +12 -0
- package/dist/playwright-3AT3AKTV.cjs +98673 -0
- package/dist/playwright-VZPDVUEQ.js +98660 -0
- package/dist/reconstruction/index.cjs +153 -0
- package/dist/reconstruction/index.d.ts +29 -2
- package/dist/reconstruction/index.js +8 -0
- package/dist/runtime.cjs +316 -0
- package/dist/runtime.d.ts +61 -0
- package/dist/runtime.js +31 -0
- package/dist/self-improvement/index.cjs +563 -0
- package/dist/self-improvement/index.js +545 -0
- package/dist/storage/index.cjs +38 -0
- package/dist/storage/index.js +5 -0
- package/dist/testing.cjs +25 -0
- package/dist/testing.d.ts +70 -0
- package/dist/testing.js +4 -0
- package/dist/traitDocs/traitDocs.cjs +33 -0
- package/dist/traitDocs/traitDocs.js +7 -0
- package/dist/traits/botanical-lotus.cjs +41 -0
- package/dist/traits/botanical-lotus.d.ts +172 -0
- package/dist/traits/botanical-lotus.js +4 -0
- package/dist/traits/engines/index.cjs +520 -0
- package/dist/traits/engines/index.js +380 -0
- package/dist/traits/index.cjs +24409 -0
- package/dist/traits/index.d.ts +171 -35
- package/dist/traits/index.js +21634 -0
- package/dist/traits/simulation-solver-factory.cjs +13 -0
- package/dist/traits/simulation-solver-factory.d.ts +23 -0
- package/dist/traits/simulation-solver-factory.js +4 -0
- package/dist/traits/webcam-gaze.cjs +35 -0
- package/dist/traits/webcam-gaze.d.ts +17 -0
- package/dist/traits/webcam-gaze.js +4 -0
- package/dist/type-checker.cjs +19 -0
- package/dist/type-checker.js +6 -0
- package/dist/world/index.cjs +947 -0
- package/dist/world/index.d.ts +147 -0
- package/dist/world/index.js +939 -0
- package/dist/world-model/index.cjs +1446 -0
- package/dist/world-model/index.d.ts +119 -0
- package/dist/world-model/index.js +1414 -0
- package/dist/wot/index.cjs +29 -0
- package/dist/wot/index.js +4 -0
- package/package.json +93 -49
|
@@ -0,0 +1,545 @@
|
|
|
1
|
+
import '../chunk-OL46QLBJ.js';
|
|
2
|
+
import { createHash } from 'crypto';
|
|
3
|
+
|
|
4
|
+
// src/self-improvement/SelfImproveHarvester.ts
|
|
5
|
+
var SelfImproveHarvester = class {
|
|
6
|
+
constructor(config = {}) {
|
|
7
|
+
this.entries = [];
|
|
8
|
+
this.outputFile = config.outputFile ?? config.outputDir ?? "memory://self-improvement-harvest.jsonl";
|
|
9
|
+
this.minQualityScore = config.minQualityScore ?? 0;
|
|
10
|
+
}
|
|
11
|
+
harvestFromCycle(instruction, output, testResult, qualityScore, metadata) {
|
|
12
|
+
if (qualityScore < this.minQualityScore) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
this.entries.push({
|
|
16
|
+
instruction,
|
|
17
|
+
output,
|
|
18
|
+
testResult,
|
|
19
|
+
qualityScore,
|
|
20
|
+
...metadata ? { metadata } : {},
|
|
21
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
getStats() {
|
|
25
|
+
return {
|
|
26
|
+
entryCount: this.entries.length,
|
|
27
|
+
currentFile: this.outputFile
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
var OUTCOME_SCHEMA_VERSION = "1.0.0";
|
|
32
|
+
function artifactHash(artifact) {
|
|
33
|
+
return {
|
|
34
|
+
path: artifact.path,
|
|
35
|
+
kind: artifact.kind,
|
|
36
|
+
algorithm: "sha256",
|
|
37
|
+
hash: createHash("sha256").update(artifact.content).digest("hex")
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function artifactHashes(artifacts) {
|
|
41
|
+
return artifacts.map(artifactHash);
|
|
42
|
+
}
|
|
43
|
+
function validateOutcomeSpec(spec) {
|
|
44
|
+
const errors = [];
|
|
45
|
+
if (!spec.id) errors.push("OutcomeSpec.id is required.");
|
|
46
|
+
if (!Array.isArray(spec.rubric) || spec.rubric.length === 0) {
|
|
47
|
+
errors.push("OutcomeSpec.rubric must include at least one criterion.");
|
|
48
|
+
}
|
|
49
|
+
if (!Number.isFinite(spec.threshold) || spec.threshold <= 0 || spec.threshold > 1) {
|
|
50
|
+
errors.push("OutcomeSpec.threshold must be in (0, 1].");
|
|
51
|
+
}
|
|
52
|
+
if (!Number.isInteger(spec.maxIterations) || spec.maxIterations < 1) {
|
|
53
|
+
errors.push("OutcomeSpec.maxIterations must be a positive integer.");
|
|
54
|
+
}
|
|
55
|
+
if (!Array.isArray(spec.artifacts) || spec.artifacts.length === 0) {
|
|
56
|
+
errors.push("OutcomeSpec.artifacts must include at least one artifact.");
|
|
57
|
+
}
|
|
58
|
+
if (!spec.grader?.id) errors.push("OutcomeSpec.grader.id is required.");
|
|
59
|
+
if (!Array.isArray(spec.validationCommands)) {
|
|
60
|
+
errors.push("OutcomeSpec.validationCommands must be an array.");
|
|
61
|
+
}
|
|
62
|
+
return errors;
|
|
63
|
+
}
|
|
64
|
+
function cloneArtifacts(artifacts) {
|
|
65
|
+
return artifacts.map((artifact) => ({ ...artifact }));
|
|
66
|
+
}
|
|
67
|
+
function cloneSpec(spec) {
|
|
68
|
+
return {
|
|
69
|
+
...spec,
|
|
70
|
+
rubric: spec.rubric.map((criterion) => ({ ...criterion })),
|
|
71
|
+
artifacts: cloneArtifacts(spec.artifacts),
|
|
72
|
+
validationCommands: spec.validationCommands.map((command) => ({ ...command })),
|
|
73
|
+
grader: { ...spec.grader },
|
|
74
|
+
circuitBreaker: spec.circuitBreaker ? { ...spec.circuitBreaker } : void 0,
|
|
75
|
+
metadata: spec.metadata ? { ...spec.metadata } : void 0
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function clampScore(score) {
|
|
79
|
+
if (!Number.isFinite(score)) return 0;
|
|
80
|
+
return Math.max(0, Math.min(1, score));
|
|
81
|
+
}
|
|
82
|
+
function scoreFromCriteria(spec, criteria) {
|
|
83
|
+
if (criteria.length === 0) return 0;
|
|
84
|
+
const weights = new Map(spec.rubric.map((criterion) => [criterion.id, criterion.weight ?? 1]));
|
|
85
|
+
const totalWeight = criteria.reduce((sum, criterion) => sum + Math.max(0, weights.get(criterion.criterionId) ?? 1), 0);
|
|
86
|
+
if (totalWeight === 0) return 0;
|
|
87
|
+
const weighted = criteria.reduce((sum, criterion) => {
|
|
88
|
+
const weight = Math.max(0, weights.get(criterion.criterionId) ?? 1);
|
|
89
|
+
return sum + clampScore(criterion.score) * weight;
|
|
90
|
+
}, 0);
|
|
91
|
+
return Math.round(weighted / totalWeight * 1e4) / 1e4;
|
|
92
|
+
}
|
|
93
|
+
function normalizeGrade(spec, grade) {
|
|
94
|
+
const returned = new Map(
|
|
95
|
+
grade.criteria.map((criterion) => [
|
|
96
|
+
criterion.criterionId,
|
|
97
|
+
{
|
|
98
|
+
...criterion,
|
|
99
|
+
score: clampScore(criterion.score)
|
|
100
|
+
}
|
|
101
|
+
])
|
|
102
|
+
);
|
|
103
|
+
const criteria = spec.rubric.map((rubricCriterion) => {
|
|
104
|
+
const criterion = returned.get(rubricCriterion.id);
|
|
105
|
+
if (criterion) return criterion;
|
|
106
|
+
return {
|
|
107
|
+
criterionId: rubricCriterion.id,
|
|
108
|
+
score: 0,
|
|
109
|
+
passed: false,
|
|
110
|
+
gap: "No grade returned for this rubric criterion."
|
|
111
|
+
};
|
|
112
|
+
});
|
|
113
|
+
return {
|
|
114
|
+
...grade,
|
|
115
|
+
criteria,
|
|
116
|
+
score: clampScore(grade.score ?? scoreFromCriteria(spec, criteria))
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
function makeContext(specId, role, iteration) {
|
|
120
|
+
return {
|
|
121
|
+
role,
|
|
122
|
+
iteration,
|
|
123
|
+
contextId: `${specId}:${role}:${iteration}`
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
function validationFallback(command) {
|
|
127
|
+
return {
|
|
128
|
+
...command,
|
|
129
|
+
passed: true,
|
|
130
|
+
exitCode: 0
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
function requiredValidationFailed(results) {
|
|
134
|
+
return results.some((result) => result.required !== false && !result.passed);
|
|
135
|
+
}
|
|
136
|
+
function circuitBreakerTripped(spec, receipts, consecutiveFailures) {
|
|
137
|
+
const config = spec.circuitBreaker;
|
|
138
|
+
if (!config) return null;
|
|
139
|
+
if (config.maxConsecutiveFailures !== void 0 && consecutiveFailures >= config.maxConsecutiveFailures) {
|
|
140
|
+
return `Circuit breaker tripped after ${consecutiveFailures} consecutive failed iteration(s).`;
|
|
141
|
+
}
|
|
142
|
+
if (config.minScoreProgress !== void 0 && receipts.length >= 2) {
|
|
143
|
+
const latest = receipts[receipts.length - 1];
|
|
144
|
+
const previous = receipts[receipts.length - 2];
|
|
145
|
+
if (latest.score - previous.score < config.minScoreProgress) {
|
|
146
|
+
return `Circuit breaker tripped because score progress ${latest.score - previous.score} was below ${config.minScoreProgress}.`;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
var OutcomeLoop = class {
|
|
152
|
+
constructor(options) {
|
|
153
|
+
this.options = options;
|
|
154
|
+
}
|
|
155
|
+
async run(specInput) {
|
|
156
|
+
const errors = validateOutcomeSpec(specInput);
|
|
157
|
+
if (errors.length) {
|
|
158
|
+
throw new Error(`Invalid OutcomeSpec:
|
|
159
|
+
${errors.join("\n")}`);
|
|
160
|
+
}
|
|
161
|
+
const spec = cloneSpec(specInput);
|
|
162
|
+
const receipts = [];
|
|
163
|
+
let artifacts = cloneArtifacts(spec.artifacts);
|
|
164
|
+
let previousGaps = [];
|
|
165
|
+
let consecutiveFailures = 0;
|
|
166
|
+
for (let iteration = 1; iteration <= spec.maxIterations; iteration += 1) {
|
|
167
|
+
const implementerContext = makeContext(spec.id, "implementer", iteration);
|
|
168
|
+
const implementation = await this.options.implementer({
|
|
169
|
+
spec: cloneSpec(spec),
|
|
170
|
+
artifacts: cloneArtifacts(artifacts),
|
|
171
|
+
previousGaps: previousGaps.map((gap) => ({ ...gap })),
|
|
172
|
+
context: implementerContext
|
|
173
|
+
});
|
|
174
|
+
artifacts = cloneArtifacts(implementation.artifacts);
|
|
175
|
+
const hashes = artifactHashes(artifacts);
|
|
176
|
+
const validationResults = await Promise.all(
|
|
177
|
+
spec.validationCommands.map((command) => {
|
|
178
|
+
const validationContext = makeContext(spec.id, "validator", iteration);
|
|
179
|
+
return this.options.validationRunner ? this.options.validationRunner({ ...command }, validationContext) : validationFallback(command);
|
|
180
|
+
})
|
|
181
|
+
);
|
|
182
|
+
const graderContext = makeContext(spec.id, "grader", iteration);
|
|
183
|
+
const grade = normalizeGrade(
|
|
184
|
+
spec,
|
|
185
|
+
await this.options.grader({
|
|
186
|
+
spec: cloneSpec(spec),
|
|
187
|
+
artifacts: cloneArtifacts(artifacts),
|
|
188
|
+
artifactHashes: hashes.map((hash) => ({ ...hash })),
|
|
189
|
+
validationResults: validationResults.map((result) => ({ ...result })),
|
|
190
|
+
context: graderContext
|
|
191
|
+
})
|
|
192
|
+
);
|
|
193
|
+
const gaps = grade.criteria.filter((criterion) => !criterion.passed);
|
|
194
|
+
const passed = grade.score >= spec.threshold && !requiredValidationFailed(validationResults);
|
|
195
|
+
consecutiveFailures = passed ? 0 : consecutiveFailures + 1;
|
|
196
|
+
const iterationReceipt = {
|
|
197
|
+
iteration,
|
|
198
|
+
score: grade.score,
|
|
199
|
+
passed,
|
|
200
|
+
criteria: grade.criteria,
|
|
201
|
+
gaps,
|
|
202
|
+
artifactHashes: hashes,
|
|
203
|
+
validationResults,
|
|
204
|
+
implementerContextId: implementerContext.contextId,
|
|
205
|
+
graderContextId: graderContext.contextId,
|
|
206
|
+
notes: implementation.notes,
|
|
207
|
+
summary: grade.summary
|
|
208
|
+
};
|
|
209
|
+
receipts.push(iterationReceipt);
|
|
210
|
+
if (passed) {
|
|
211
|
+
return this.buildReceipt(spec, receipts, "pass", "Outcome threshold passed.");
|
|
212
|
+
}
|
|
213
|
+
const breakerReason = circuitBreakerTripped(spec, receipts, consecutiveFailures);
|
|
214
|
+
if (breakerReason) {
|
|
215
|
+
return this.buildReceipt(spec, receipts, "circuit_breaker_failure", breakerReason);
|
|
216
|
+
}
|
|
217
|
+
previousGaps = gaps.map((gap) => ({ ...gap }));
|
|
218
|
+
}
|
|
219
|
+
return this.buildReceipt(
|
|
220
|
+
spec,
|
|
221
|
+
receipts,
|
|
222
|
+
"iteration_cap",
|
|
223
|
+
`Outcome loop stopped at iteration cap ${spec.maxIterations}.`
|
|
224
|
+
);
|
|
225
|
+
}
|
|
226
|
+
buildReceipt(spec, receipts, status, stoppedReason) {
|
|
227
|
+
const latest = receipts[receipts.length - 1];
|
|
228
|
+
return {
|
|
229
|
+
schemaVersion: OUTCOME_SCHEMA_VERSION,
|
|
230
|
+
specId: spec.id,
|
|
231
|
+
status,
|
|
232
|
+
passed: status === "pass",
|
|
233
|
+
score: latest?.score ?? 0,
|
|
234
|
+
threshold: spec.threshold,
|
|
235
|
+
iterations: receipts.length,
|
|
236
|
+
iterationCap: spec.maxIterations,
|
|
237
|
+
artifactHashes: latest?.artifactHashes ?? artifactHashes(spec.artifacts),
|
|
238
|
+
graderIdentity: { ...spec.grader },
|
|
239
|
+
validationCommands: spec.validationCommands.map((command) => ({ ...command })),
|
|
240
|
+
criteria: latest?.criteria ?? [],
|
|
241
|
+
iterationReceipts: receipts,
|
|
242
|
+
stoppedReason,
|
|
243
|
+
timestamp: (this.options.now?.() ?? /* @__PURE__ */ new Date()).toISOString()
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
function runOutcomeLoop(spec, options) {
|
|
248
|
+
return new OutcomeLoop(options).run(spec);
|
|
249
|
+
}
|
|
250
|
+
var EXTERNAL_AGENT_RECEIPT_SCHEMA_VERSION = "1.0.0";
|
|
251
|
+
var CLAUDE_MANAGED_AGENTS_PROVIDER_ID = "anthropic.claude-managed-agents";
|
|
252
|
+
var CLAUDE_MANAGED_AGENTS_BETA_HEADER = "managed-agents-2026-04-01";
|
|
253
|
+
function hashText(content) {
|
|
254
|
+
return createHash("sha256").update(content).digest("hex");
|
|
255
|
+
}
|
|
256
|
+
function hashStableJson(value) {
|
|
257
|
+
return hashText(JSON.stringify(stabilizeForHash(value)));
|
|
258
|
+
}
|
|
259
|
+
function createClaudeManagedAgentsSdkClient(sdk) {
|
|
260
|
+
return {
|
|
261
|
+
async createSession(input) {
|
|
262
|
+
return toManagedAgentSession(
|
|
263
|
+
await sdk.beta.sessions.create({
|
|
264
|
+
agent: input.agent,
|
|
265
|
+
environment_id: input.environmentId,
|
|
266
|
+
...input.vaultIds ? { vault_ids: input.vaultIds.slice() } : {},
|
|
267
|
+
...input.metadata ? { metadata: { ...input.metadata } } : {}
|
|
268
|
+
})
|
|
269
|
+
);
|
|
270
|
+
},
|
|
271
|
+
async sendUserEvent(sessionId, event) {
|
|
272
|
+
await sdk.beta.sessions.events.send(sessionId, { events: [event] });
|
|
273
|
+
},
|
|
274
|
+
async retrieveSession(sessionId) {
|
|
275
|
+
return toManagedAgentSession(await sdk.beta.sessions.retrieve(sessionId));
|
|
276
|
+
},
|
|
277
|
+
async listEvents(sessionId) {
|
|
278
|
+
return toEventList(await sdk.beta.sessions.events.list(sessionId));
|
|
279
|
+
}
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
function createExternalAgentReceipt(input) {
|
|
283
|
+
const events = (input.events ?? []).map(toEventReceipt);
|
|
284
|
+
const artifacts = (input.artifacts ?? []).map(toArtifactReceipt);
|
|
285
|
+
const outcomes = (input.outcomes ?? []).map(toOutcomeReceipt);
|
|
286
|
+
const inputArtifactHashes = (input.inputArtifacts ?? []).map(toArtifactReceipt);
|
|
287
|
+
const validation = (input.validation ?? []).map((result) => ({ ...result }));
|
|
288
|
+
const request = {
|
|
289
|
+
...input.prompt ? { promptHash: hashText(input.prompt) } : {},
|
|
290
|
+
inputArtifactHashes,
|
|
291
|
+
...input.metadata ? { metadataHash: hashStableJson(input.metadata) } : {}
|
|
292
|
+
};
|
|
293
|
+
const captureMaterial = {
|
|
294
|
+
provider: input.provider,
|
|
295
|
+
agent: input.agent,
|
|
296
|
+
session: input.session,
|
|
297
|
+
request,
|
|
298
|
+
events,
|
|
299
|
+
outcomes,
|
|
300
|
+
artifacts
|
|
301
|
+
};
|
|
302
|
+
const captureHash = hashStableJson(captureMaterial);
|
|
303
|
+
return {
|
|
304
|
+
schemaVersion: EXTERNAL_AGENT_RECEIPT_SCHEMA_VERSION,
|
|
305
|
+
receiptId: `ext_${captureHash.slice(0, 16)}`,
|
|
306
|
+
provider: input.provider,
|
|
307
|
+
...input.taskId ? { taskId: input.taskId } : {},
|
|
308
|
+
createdAt: (input.now?.() ?? /* @__PURE__ */ new Date()).toISOString(),
|
|
309
|
+
captureHash,
|
|
310
|
+
agent: { ...input.agent },
|
|
311
|
+
session: { ...input.session },
|
|
312
|
+
request,
|
|
313
|
+
events,
|
|
314
|
+
outcomes,
|
|
315
|
+
artifacts,
|
|
316
|
+
validation,
|
|
317
|
+
quarantine: {
|
|
318
|
+
state: "quarantined",
|
|
319
|
+
reason: "External agent output requires local validation before any memory promotion.",
|
|
320
|
+
localValidationRequired: input.localValidationRequired ?? true
|
|
321
|
+
},
|
|
322
|
+
persistentMemoryWriteAllowed: false,
|
|
323
|
+
...input.metadata ? { metadata: { ...input.metadata } } : {}
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
function applyExternalAgentValidation(receipt, validation) {
|
|
327
|
+
const copiedValidation = validation.map((result) => ({ ...result }));
|
|
328
|
+
if (copiedValidation.length === 0) {
|
|
329
|
+
return {
|
|
330
|
+
...receipt,
|
|
331
|
+
validation: [],
|
|
332
|
+
quarantine: {
|
|
333
|
+
state: "quarantined",
|
|
334
|
+
reason: "No local validation evidence attached.",
|
|
335
|
+
localValidationRequired: true
|
|
336
|
+
},
|
|
337
|
+
persistentMemoryWriteAllowed: false
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
const requiredFailure = copiedValidation.find((result) => result.required !== false && !result.passed);
|
|
341
|
+
return {
|
|
342
|
+
...receipt,
|
|
343
|
+
validation: copiedValidation,
|
|
344
|
+
quarantine: {
|
|
345
|
+
state: requiredFailure ? "rejected" : "validated",
|
|
346
|
+
reason: requiredFailure ? `Required validation failed: ${requiredFailure.id ?? requiredFailure.command}.` : "Local validation passed; receipt remains memory-isolated until MemoryReceipt promotion.",
|
|
347
|
+
localValidationRequired: false
|
|
348
|
+
},
|
|
349
|
+
persistentMemoryWriteAllowed: false
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
function promoteExternalAgentReceipt(receipt, memoryReceipt) {
|
|
353
|
+
if (receipt.quarantine.state !== "validated") {
|
|
354
|
+
throw new Error("ExternalAgentReceipt must be locally validated before MemoryReceipt promotion.");
|
|
355
|
+
}
|
|
356
|
+
if (memoryReceipt.sourceReceiptHash !== receipt.captureHash) {
|
|
357
|
+
throw new Error("MemoryReceipt source hash must match the external agent capture hash.");
|
|
358
|
+
}
|
|
359
|
+
return {
|
|
360
|
+
...receipt,
|
|
361
|
+
quarantine: {
|
|
362
|
+
state: "promoted",
|
|
363
|
+
reason: "Promoted by MemoryReceipt reference; adapter still has no direct memory-write capability.",
|
|
364
|
+
localValidationRequired: false,
|
|
365
|
+
memoryPromotion: { ...memoryReceipt }
|
|
366
|
+
},
|
|
367
|
+
persistentMemoryWriteAllowed: false
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
var ClaudeManagedAgentAdapter = class {
|
|
371
|
+
constructor(config) {
|
|
372
|
+
this.backendId = "claude-managed-agent-quarantined";
|
|
373
|
+
this.config = config;
|
|
374
|
+
}
|
|
375
|
+
async launchAndRead(request) {
|
|
376
|
+
if (!request.prompt.trim()) {
|
|
377
|
+
throw new Error("ClaudeManagedAgentAdapter.launchAndRead requires a non-empty prompt.");
|
|
378
|
+
}
|
|
379
|
+
const session = await this.config.client.createSession({
|
|
380
|
+
agent: request.agent ?? this.config.agentId,
|
|
381
|
+
environmentId: request.environmentId ?? this.config.environmentId,
|
|
382
|
+
vaultIds: request.vaultIds?.slice(),
|
|
383
|
+
metadata: request.metadata ? { ...request.metadata } : void 0
|
|
384
|
+
});
|
|
385
|
+
await this.config.client.sendUserEvent(session.id, {
|
|
386
|
+
type: "user.message",
|
|
387
|
+
content: [{ type: "text", text: request.prompt }]
|
|
388
|
+
});
|
|
389
|
+
return this.readSession({
|
|
390
|
+
sessionId: session.id,
|
|
391
|
+
taskId: request.taskId,
|
|
392
|
+
prompt: request.prompt,
|
|
393
|
+
inputArtifacts: request.inputArtifacts,
|
|
394
|
+
validation: request.validation,
|
|
395
|
+
metadata: request.metadata
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
async readSession(request) {
|
|
399
|
+
const [session, events, artifacts, outcomes] = await Promise.all([
|
|
400
|
+
this.config.client.retrieveSession(request.sessionId),
|
|
401
|
+
this.config.client.listEvents(request.sessionId),
|
|
402
|
+
this.config.client.listArtifacts?.(request.sessionId) ?? Promise.resolve([]),
|
|
403
|
+
this.config.client.listOutcomes?.(request.sessionId) ?? Promise.resolve([])
|
|
404
|
+
]);
|
|
405
|
+
const receipt = createExternalAgentReceipt({
|
|
406
|
+
provider: this.config.provider ?? CLAUDE_MANAGED_AGENTS_PROVIDER_ID,
|
|
407
|
+
agent: {
|
|
408
|
+
id: session.agentId ?? this.config.agentId,
|
|
409
|
+
vendor: "anthropic",
|
|
410
|
+
label: "Claude Managed Agent",
|
|
411
|
+
model: this.config.model,
|
|
412
|
+
betaHeader: CLAUDE_MANAGED_AGENTS_BETA_HEADER
|
|
413
|
+
},
|
|
414
|
+
session: {
|
|
415
|
+
id: session.id,
|
|
416
|
+
status: session.status,
|
|
417
|
+
agentId: session.agentId ?? this.config.agentId,
|
|
418
|
+
environmentId: session.environmentId ?? this.config.environmentId,
|
|
419
|
+
url: session.url
|
|
420
|
+
},
|
|
421
|
+
taskId: request.taskId,
|
|
422
|
+
prompt: request.prompt,
|
|
423
|
+
inputArtifacts: request.inputArtifacts,
|
|
424
|
+
events,
|
|
425
|
+
artifacts,
|
|
426
|
+
outcomes,
|
|
427
|
+
validation: request.validation,
|
|
428
|
+
metadata: request.metadata,
|
|
429
|
+
now: this.config.now
|
|
430
|
+
});
|
|
431
|
+
return request.validation ? applyExternalAgentValidation(receipt, request.validation) : receipt;
|
|
432
|
+
}
|
|
433
|
+
async runBenchmarkCase(input) {
|
|
434
|
+
const receipt = await this.launchAndRead(input);
|
|
435
|
+
const firstOutcomeScore = receipt.outcomes.find((outcome) => typeof outcome.score === "number")?.score ?? 0;
|
|
436
|
+
const score = input.scorer ? input.scorer(receipt) : firstOutcomeScore;
|
|
437
|
+
return {
|
|
438
|
+
backendId: this.backendId,
|
|
439
|
+
receipt,
|
|
440
|
+
score,
|
|
441
|
+
passed: receipt.quarantine.state === "validated" || receipt.quarantine.state === "promoted"
|
|
442
|
+
};
|
|
443
|
+
}
|
|
444
|
+
};
|
|
445
|
+
function toEventReceipt(event) {
|
|
446
|
+
return {
|
|
447
|
+
...event.id ? { id: event.id } : {},
|
|
448
|
+
type: event.type,
|
|
449
|
+
...event.processedAt ? { processedAt: event.processedAt } : {},
|
|
450
|
+
...event.sessionThreadId ? { sessionThreadId: event.sessionThreadId } : {},
|
|
451
|
+
...event.summary ? { summary: event.summary } : {},
|
|
452
|
+
rawHash: hashStableJson(event)
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
function toArtifactReceipt(artifact) {
|
|
456
|
+
const hasContentHash = Boolean(artifact.contentHash);
|
|
457
|
+
const hasContent = artifact.content !== void 0;
|
|
458
|
+
const hash = artifact.contentHash ?? (hasContent ? hashText(artifact.content ?? "") : hashStableJson({
|
|
459
|
+
id: artifact.id,
|
|
460
|
+
path: artifact.path,
|
|
461
|
+
uri: artifact.uri,
|
|
462
|
+
type: artifact.type,
|
|
463
|
+
producer: artifact.producer
|
|
464
|
+
}));
|
|
465
|
+
return {
|
|
466
|
+
...artifact.id ? { id: artifact.id } : {},
|
|
467
|
+
...artifact.path ? { path: artifact.path } : {},
|
|
468
|
+
...artifact.uri ? { uri: artifact.uri } : {},
|
|
469
|
+
type: artifact.type,
|
|
470
|
+
producer: artifact.producer,
|
|
471
|
+
...artifact.validator ? { validator: artifact.validator } : {},
|
|
472
|
+
hash,
|
|
473
|
+
hashKind: hasContentHash || hasContent ? "sha256-content" : "sha256-descriptor"
|
|
474
|
+
};
|
|
475
|
+
}
|
|
476
|
+
function toOutcomeReceipt(outcome) {
|
|
477
|
+
return {
|
|
478
|
+
id: outcome.id,
|
|
479
|
+
...typeof outcome.score === "number" ? { score: clamp01(outcome.score) } : {},
|
|
480
|
+
...typeof outcome.passed === "boolean" ? { passed: outcome.passed } : {},
|
|
481
|
+
...outcome.rubricHash ? { rubricHash: outcome.rubricHash } : {},
|
|
482
|
+
...outcome.summary ? { summary: outcome.summary } : {},
|
|
483
|
+
...outcome.criteria ? { criteriaHash: hashStableJson(outcome.criteria) } : {}
|
|
484
|
+
};
|
|
485
|
+
}
|
|
486
|
+
function toManagedAgentSession(value) {
|
|
487
|
+
const record = asRecord(value);
|
|
488
|
+
const id = stringField(record, ["id"]);
|
|
489
|
+
if (!id) {
|
|
490
|
+
throw new Error("Claude Managed Agents SDK response did not include a session id.");
|
|
491
|
+
}
|
|
492
|
+
return {
|
|
493
|
+
id,
|
|
494
|
+
...stringField(record, ["status"]) ? { status: stringField(record, ["status"]) } : {},
|
|
495
|
+
...stringField(record, ["agentId", "agent_id"]) ? { agentId: stringField(record, ["agentId", "agent_id"]) } : {},
|
|
496
|
+
...stringField(record, ["environmentId", "environment_id"]) ? { environmentId: stringField(record, ["environmentId", "environment_id"]) } : {},
|
|
497
|
+
...stringField(record, ["url"]) ? { url: stringField(record, ["url"]) } : {}
|
|
498
|
+
};
|
|
499
|
+
}
|
|
500
|
+
function toEventList(value) {
|
|
501
|
+
const list = Array.isArray(value) ? value : Array.isArray(asRecord(value).data) ? asRecord(value).data : [];
|
|
502
|
+
return list.map((event) => {
|
|
503
|
+
const record = asRecord(event);
|
|
504
|
+
return {
|
|
505
|
+
id: stringField(record, ["id"]),
|
|
506
|
+
type: stringField(record, ["type"]) ?? "unknown.event",
|
|
507
|
+
processedAt: stringField(record, ["processedAt", "processed_at"]),
|
|
508
|
+
sessionThreadId: stringField(record, ["sessionThreadId", "session_thread_id"]),
|
|
509
|
+
summary: stringField(record, ["summary"]),
|
|
510
|
+
payload: event
|
|
511
|
+
};
|
|
512
|
+
});
|
|
513
|
+
}
|
|
514
|
+
function asRecord(value) {
|
|
515
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
516
|
+
}
|
|
517
|
+
function stringField(record, keys) {
|
|
518
|
+
for (const key of keys) {
|
|
519
|
+
const value = record[key];
|
|
520
|
+
if (typeof value === "string" && value.length > 0) return value;
|
|
521
|
+
}
|
|
522
|
+
return void 0;
|
|
523
|
+
}
|
|
524
|
+
function clamp01(value) {
|
|
525
|
+
if (!Number.isFinite(value)) return 0;
|
|
526
|
+
return Math.max(0, Math.min(1, value));
|
|
527
|
+
}
|
|
528
|
+
function stabilizeForHash(value) {
|
|
529
|
+
if (value === null) return null;
|
|
530
|
+
if (Array.isArray(value)) return value.map((item) => item === void 0 ? null : stabilizeForHash(item));
|
|
531
|
+
if (value instanceof Date) return value.toISOString();
|
|
532
|
+
if (typeof value !== "object") return value;
|
|
533
|
+
const record = value;
|
|
534
|
+
const normalized = {};
|
|
535
|
+
for (const key of Object.keys(record).sort()) {
|
|
536
|
+
const item = record[key];
|
|
537
|
+
if (item === void 0 || typeof item === "function") continue;
|
|
538
|
+
normalized[key] = stabilizeForHash(item);
|
|
539
|
+
}
|
|
540
|
+
return normalized;
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
export { CLAUDE_MANAGED_AGENTS_BETA_HEADER, CLAUDE_MANAGED_AGENTS_PROVIDER_ID, ClaudeManagedAgentAdapter, EXTERNAL_AGENT_RECEIPT_SCHEMA_VERSION, OUTCOME_SCHEMA_VERSION, OutcomeLoop, SelfImproveHarvester, applyExternalAgentValidation, artifactHash, artifactHashes, createClaudeManagedAgentsSdkClient, createExternalAgentReceipt, hashStableJson, hashText, promoteExternalAgentReceipt, runOutcomeLoop, validateOutcomeSpec };
|
|
544
|
+
//# sourceMappingURL=index.js.map
|
|
545
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkFJPADH77_cjs = require('../chunk-FJPADH77.cjs');
|
|
4
|
+
require('../chunk-E7JP3BS3.cjs');
|
|
5
|
+
require('../chunk-HCCQLAA4.cjs');
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
Object.defineProperty(exports, "FileSizeExceededError", {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: function () { return chunkFJPADH77_cjs.FileSizeExceededError; }
|
|
12
|
+
});
|
|
13
|
+
Object.defineProperty(exports, "IPFSPinError", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () { return chunkFJPADH77_cjs.IPFSPinError; }
|
|
16
|
+
});
|
|
17
|
+
Object.defineProperty(exports, "IPFSService", {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
get: function () { return chunkFJPADH77_cjs.IPFSService; }
|
|
20
|
+
});
|
|
21
|
+
Object.defineProperty(exports, "IPFSUploadError", {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () { return chunkFJPADH77_cjs.IPFSUploadError; }
|
|
24
|
+
});
|
|
25
|
+
Object.defineProperty(exports, "InfuraProvider", {
|
|
26
|
+
enumerable: true,
|
|
27
|
+
get: function () { return chunkFJPADH77_cjs.InfuraProvider; }
|
|
28
|
+
});
|
|
29
|
+
Object.defineProperty(exports, "NFTStorageProvider", {
|
|
30
|
+
enumerable: true,
|
|
31
|
+
get: function () { return chunkFJPADH77_cjs.NFTStorageProvider; }
|
|
32
|
+
});
|
|
33
|
+
Object.defineProperty(exports, "PinataProvider", {
|
|
34
|
+
enumerable: true,
|
|
35
|
+
get: function () { return chunkFJPADH77_cjs.PinataProvider; }
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=index.cjs.map
|
|
38
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { FileSizeExceededError, IPFSPinError, IPFSService, IPFSUploadError, InfuraProvider, NFTStorageProvider, PinataProvider } from '../chunk-WRWEX5ZF.js';
|
|
2
|
+
import '../chunk-VVKVQZI6.js';
|
|
3
|
+
import '../chunk-OL46QLBJ.js';
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
package/dist/testing.cjs
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkPGANYCAG_cjs = require('./chunk-PGANYCAG.cjs');
|
|
4
|
+
require('./chunk-HCCQLAA4.cjs');
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
Object.defineProperty(exports, "DeterminismHarness", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function () { return chunkPGANYCAG_cjs.DeterminismHarness; }
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "captureEnvironment", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () { return chunkPGANYCAG_cjs.captureEnvironment; }
|
|
15
|
+
});
|
|
16
|
+
Object.defineProperty(exports, "describeEnvironment", {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: function () { return chunkPGANYCAG_cjs.describeEnvironment; }
|
|
19
|
+
});
|
|
20
|
+
Object.defineProperty(exports, "hashBytes", {
|
|
21
|
+
enumerable: true,
|
|
22
|
+
get: function () { return chunkPGANYCAG_cjs.hashBytes; }
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=testing.cjs.map
|
|
25
|
+
//# sourceMappingURL=testing.cjs.map
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/** @holoscript/core/testing — narrow empirical test utilities */
|
|
2
|
+
export interface GpuInfo {
|
|
3
|
+
vendor?: string;
|
|
4
|
+
architecture?: string;
|
|
5
|
+
device?: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
backend?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface NodeInfo {
|
|
10
|
+
version: string;
|
|
11
|
+
arch: string;
|
|
12
|
+
platform: string;
|
|
13
|
+
}
|
|
14
|
+
export interface BrowserInfo {
|
|
15
|
+
userAgent?: string;
|
|
16
|
+
browser?: string;
|
|
17
|
+
os?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface EnvironmentInfo {
|
|
20
|
+
runtime: 'browser' | 'node' | 'unknown';
|
|
21
|
+
gpu?: GpuInfo;
|
|
22
|
+
node?: NodeInfo;
|
|
23
|
+
browser?: BrowserInfo;
|
|
24
|
+
annotations?: Record<string, string>;
|
|
25
|
+
}
|
|
26
|
+
export interface ProbeResult<T = Uint8Array | string> {
|
|
27
|
+
name: string;
|
|
28
|
+
timestamp: number;
|
|
29
|
+
environment: EnvironmentInfo;
|
|
30
|
+
durationMs: number;
|
|
31
|
+
outputHash: string;
|
|
32
|
+
outputSize: number;
|
|
33
|
+
output?: T;
|
|
34
|
+
error?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface DivergenceGroup {
|
|
37
|
+
hash: string;
|
|
38
|
+
results: ProbeResult[];
|
|
39
|
+
environments: string[];
|
|
40
|
+
}
|
|
41
|
+
export interface DivergenceReport {
|
|
42
|
+
probeName: string;
|
|
43
|
+
totalResults: number;
|
|
44
|
+
uniqueHashes: number;
|
|
45
|
+
divergent: boolean;
|
|
46
|
+
groups: DivergenceGroup[];
|
|
47
|
+
summary: string;
|
|
48
|
+
}
|
|
49
|
+
export interface HarnessOptions {
|
|
50
|
+
captureOutput?: boolean;
|
|
51
|
+
hashAlgorithm?: 'sha256' | 'fnv1a';
|
|
52
|
+
annotations?: Record<string, string>;
|
|
53
|
+
}
|
|
54
|
+
export declare function captureEnvironment(
|
|
55
|
+
annotations?: Record<string, string>
|
|
56
|
+
): Promise<EnvironmentInfo>;
|
|
57
|
+
export declare function hashBytes(
|
|
58
|
+
input: Uint8Array | string,
|
|
59
|
+
algo?: 'sha256' | 'fnv1a'
|
|
60
|
+
): Promise<string>;
|
|
61
|
+
export declare class DeterminismHarness {
|
|
62
|
+
constructor(options?: HarnessOptions);
|
|
63
|
+
probe<T extends Uint8Array | string>(
|
|
64
|
+
name: string,
|
|
65
|
+
fn: () => Promise<T> | T,
|
|
66
|
+
annotations?: Record<string, string>
|
|
67
|
+
): Promise<ProbeResult<T>>;
|
|
68
|
+
static compareResults(results: ProbeResult[]): DivergenceReport;
|
|
69
|
+
}
|
|
70
|
+
export declare function describeEnvironment(env: EnvironmentInfo): string;
|
package/dist/testing.js
ADDED