openpond-sdk 0.12.3 → 0.12.5

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 (386) hide show
  1. package/dist/actions-local.js +2 -1
  2. package/dist/actions-local.js.map +1 -7
  3. package/dist/actions.js +2 -1
  4. package/dist/actions.js.map +1 -7
  5. package/dist/advanced-refiner-evaluations.js +13 -12
  6. package/dist/advanced-refiner-evaluations.js.map +1 -7
  7. package/dist/candidate-evaluations.js +9 -8
  8. package/dist/candidate-evaluations.js.map +1 -7
  9. package/dist/{chunk-77N3QEIL.js → chunk-25L5IXHA.js} +5 -5
  10. package/dist/chunk-25L5IXHA.js.map +1 -0
  11. package/dist/{chunk-YCQVVFE5.js → chunk-3B5KSH3V.js} +2 -2
  12. package/dist/chunk-3B5KSH3V.js.map +1 -0
  13. package/dist/{chunk-2DMYAJLS.js → chunk-3DWPLYFJ.js} +2 -2
  14. package/dist/chunk-3DWPLYFJ.js.map +1 -0
  15. package/dist/{chunk-ZJ3H3VS7.js → chunk-6GQ3GIAP.js} +7 -5
  16. package/dist/chunk-6GQ3GIAP.js.map +1 -0
  17. package/dist/{chunk-36WJTS5V.js → chunk-6KKM2XRR.js} +75 -15
  18. package/dist/chunk-6KKM2XRR.js.map +1 -0
  19. package/dist/{chunk-BSK3VLM3.js → chunk-6MFFKAU6.js} +3 -3
  20. package/dist/chunk-6MFFKAU6.js.map +1 -0
  21. package/dist/{chunk-UPS52OPZ.js → chunk-6Y67YHVH.js} +8 -8
  22. package/dist/chunk-6Y67YHVH.js.map +1 -0
  23. package/dist/{chunk-G6Y6CQYV.js → chunk-AUNNXJQE.js} +4 -4
  24. package/dist/chunk-AUNNXJQE.js.map +1 -0
  25. package/dist/{chunk-XYQD4LDI.js → chunk-BGNPKYBJ.js} +3 -3
  26. package/dist/chunk-BGNPKYBJ.js.map +1 -0
  27. package/dist/{chunk-K5WRVSOL.js → chunk-BJ5MKLWH.js} +8 -8
  28. package/dist/chunk-BJ5MKLWH.js.map +1 -0
  29. package/dist/{chunk-VY5AFE7A.js → chunk-BYNVSWIQ.js} +4 -4
  30. package/dist/chunk-BYNVSWIQ.js.map +1 -0
  31. package/dist/{chunk-TCHAWJMB.js → chunk-CAMLCKSF.js} +3 -3
  32. package/dist/chunk-CAMLCKSF.js.map +1 -0
  33. package/dist/{chunk-3KXDH6OB.js → chunk-CL3IOOVL.js} +1 -1
  34. package/dist/chunk-CL3IOOVL.js.map +1 -0
  35. package/dist/{chunk-CTVKI3BV.js → chunk-DBKCSQVH.js} +3 -3
  36. package/dist/chunk-DBKCSQVH.js.map +1 -0
  37. package/dist/{chunk-AG5DDL7T.js → chunk-DH6O4JFB.js} +2 -2
  38. package/dist/chunk-DH6O4JFB.js.map +1 -0
  39. package/dist/chunk-EJZ7HOIS.js +8709 -0
  40. package/dist/chunk-EJZ7HOIS.js.map +1 -0
  41. package/dist/{chunk-QEIT5VXJ.js → chunk-F4GITADW.js} +4 -4
  42. package/dist/chunk-F4GITADW.js.map +1 -0
  43. package/dist/{chunk-MEKWESBF.js → chunk-FBZTDDRC.js} +2 -2
  44. package/dist/chunk-FBZTDDRC.js.map +1 -0
  45. package/dist/{chunk-FY7NHCEH.js → chunk-FLNWE5ZA.js} +5 -5
  46. package/dist/chunk-FLNWE5ZA.js.map +1 -0
  47. package/dist/{chunk-YVUIHH6Z.js → chunk-GPQLBVQC.js} +1 -1
  48. package/dist/chunk-GPQLBVQC.js.map +1 -0
  49. package/dist/{chunk-YUKV7RCD.js → chunk-GWGDWZVN.js} +5 -5
  50. package/dist/chunk-GWGDWZVN.js.map +1 -0
  51. package/dist/{chunk-KAE7AMYE.js → chunk-H3367ISL.js} +2 -2
  52. package/dist/chunk-H3367ISL.js.map +1 -0
  53. package/dist/{chunk-COPVBJPL.js → chunk-H3JZ3P5T.js} +2 -1
  54. package/dist/chunk-H3JZ3P5T.js.map +1 -0
  55. package/dist/{chunk-3LP7DNLQ.js → chunk-H4NTJFEE.js} +2 -2
  56. package/dist/chunk-H4NTJFEE.js.map +1 -0
  57. package/dist/{chunk-CEZEVILU.js → chunk-HJ2AIAKX.js} +1 -1
  58. package/dist/chunk-HJ2AIAKX.js.map +1 -0
  59. package/dist/{chunk-BFR3VC25.js → chunk-HOOHJCE7.js} +18 -18
  60. package/dist/chunk-HOOHJCE7.js.map +1 -0
  61. package/dist/{chunk-TSMGMA6R.js → chunk-KKL6OICH.js} +3 -3
  62. package/dist/chunk-KKL6OICH.js.map +1 -0
  63. package/dist/{chunk-IWT6JUZD.js → chunk-L6EJX2VQ.js} +2 -2
  64. package/dist/chunk-L6EJX2VQ.js.map +1 -0
  65. package/dist/{chunk-QTJQIHDZ.js → chunk-MJELLVQP.js} +4 -3
  66. package/dist/chunk-MJELLVQP.js.map +1 -0
  67. package/dist/{chunk-CK3ONRRC.js → chunk-O54KGALH.js} +3 -3
  68. package/dist/chunk-O54KGALH.js.map +1 -0
  69. package/dist/{chunk-T4APHDES.js → chunk-O6FKHAWN.js} +1 -1
  70. package/dist/chunk-O6FKHAWN.js.map +1 -0
  71. package/dist/{chunk-P27DQ65Z.js → chunk-OVGDDKO2.js} +1 -1
  72. package/dist/chunk-OVGDDKO2.js.map +1 -0
  73. package/dist/{chunk-O4GE6VTR.js → chunk-PWW5QKZS.js} +2 -2
  74. package/dist/chunk-PWW5QKZS.js.map +1 -0
  75. package/dist/{chunk-DUKW3R7O.js → chunk-Q4TKI2MV.js} +2 -2
  76. package/dist/chunk-Q4TKI2MV.js.map +1 -0
  77. package/dist/{chunk-HKWX624G.js → chunk-QFBSNSUL.js} +5 -5
  78. package/dist/chunk-QFBSNSUL.js.map +1 -0
  79. package/dist/{chunk-MLPPSCDQ.js → chunk-RE426Q7Y.js} +4 -4
  80. package/dist/chunk-RE426Q7Y.js.map +1 -0
  81. package/dist/{chunk-G53MA5XX.js → chunk-T3MFWGMX.js} +3 -3
  82. package/dist/chunk-T3MFWGMX.js.map +1 -0
  83. package/dist/{chunk-2U54EOXJ.js → chunk-TK3DXH7A.js} +1 -1
  84. package/dist/chunk-TK3DXH7A.js.map +1 -0
  85. package/dist/{chunk-6Q4I33CH.js → chunk-VZPNRPXL.js} +5 -5
  86. package/dist/chunk-VZPNRPXL.js.map +1 -0
  87. package/dist/{chunk-ROBAX5TN.js → chunk-WQFU635Q.js} +8 -6
  88. package/dist/chunk-WQFU635Q.js.map +1 -0
  89. package/dist/{chunk-TMUAKJWX.js → chunk-XACJ63U4.js} +14 -5
  90. package/dist/chunk-XACJ63U4.js.map +1 -0
  91. package/dist/chunk-YLJ4XMA6.js +35 -0
  92. package/dist/chunk-YLJ4XMA6.js.map +1 -0
  93. package/dist/{chunk-K3JCP4FO.js → chunk-Z252BNAZ.js} +1 -1
  94. package/dist/chunk-Z252BNAZ.js.map +1 -0
  95. package/dist/{chunk-CWXM57QR.js → chunk-ZFYI4P6C.js} +5 -5
  96. package/dist/chunk-ZFYI4P6C.js.map +1 -0
  97. package/dist/connected-evidence.js +22 -21
  98. package/dist/connected-evidence.js.map +1 -7
  99. package/dist/dataset-commerce.js +2 -0
  100. package/dist/dataset-commerce.js.map +1 -7
  101. package/dist/dataset-marketplace.js +2 -0
  102. package/dist/dataset-marketplace.js.map +1 -7
  103. package/dist/dataset-workspaces.js +22 -21
  104. package/dist/dataset-workspaces.js.map +1 -7
  105. package/dist/experiment-evaluation-schedules.js +28 -27
  106. package/dist/experiment-evaluation-schedules.js.map +1 -7
  107. package/dist/experiment-improvements.js +12 -11
  108. package/dist/experiment-improvements.js.map +1 -7
  109. package/dist/experiments.js +26 -25
  110. package/dist/experiments.js.map +1 -7
  111. package/dist/human-review.js +3 -2
  112. package/dist/human-review.js.map +1 -7
  113. package/dist/index.js +154 -62
  114. package/dist/index.js.map +1 -7
  115. package/dist/learning.js +4 -3
  116. package/dist/learning.js.map +1 -7
  117. package/dist/model-batch-review.js +2 -1
  118. package/dist/model-batch-review.js.map +1 -7
  119. package/dist/model-projects.js +3 -2
  120. package/dist/model-projects.js.map +1 -7
  121. package/dist/model-starter-attempts.js +5 -4
  122. package/dist/model-starter-attempts.js.map +1 -7
  123. package/dist/model-starter-catalog.js +15 -14
  124. package/dist/model-starter-catalog.js.map +1 -7
  125. package/dist/model-starters.js +15 -14
  126. package/dist/model-starters.js.map +1 -7
  127. package/dist/model-taskset-authoring.js +2 -1
  128. package/dist/model-taskset-authoring.js.map +1 -7
  129. package/dist/model-taskset-runs.js +6 -5
  130. package/dist/model-taskset-runs.js.map +1 -7
  131. package/dist/post-training.js +9 -8
  132. package/dist/post-training.js.map +1 -7
  133. package/dist/profile-actions.js +3 -2
  134. package/dist/profile-actions.js.map +1 -7
  135. package/dist/project-actions.js +3 -2
  136. package/dist/project-actions.js.map +1 -7
  137. package/dist/refiner.js +3 -2
  138. package/dist/refiner.js.map +1 -7
  139. package/dist/taskset-catalog.js +2 -1
  140. package/dist/taskset-catalog.js.map +1 -7
  141. package/dist/taskset-drafts.js +19 -18
  142. package/dist/taskset-drafts.js.map +1 -7
  143. package/dist/taskset-packages.js +25 -22
  144. package/dist/taskset-packages.js.map +1 -7
  145. package/dist/training-bundle.js +44 -19
  146. package/dist/training-bundle.js.map +1 -7
  147. package/dist/training-projects.js +2 -1
  148. package/dist/training-projects.js.map +1 -7
  149. package/dist/training.js +11 -10
  150. package/dist/training.js.map +1 -7
  151. package/dist/types/packages/cloud/src/api/core.d.ts.map +1 -1
  152. package/dist/types/packages/cloud/src/hosted-chat.d.ts +28 -0
  153. package/dist/types/packages/cloud/src/hosted-chat.d.ts.map +1 -1
  154. package/dist/types/packages/cloud/src/sandbox/client-handles.d.ts.map +1 -1
  155. package/dist/types/packages/cloud/src/sandbox/client.d.ts.map +1 -1
  156. package/dist/types/packages/cloud/src/sandbox/sandbox-instance-client.d.ts.map +1 -1
  157. package/dist/types/packages/cloud/src/sandbox/types/runtime-profiles.d.ts.map +1 -1
  158. package/dist/types/packages/sdk/src/advanced-refiner-evaluations.d.ts +487 -487
  159. package/dist/types/packages/sdk/src/advanced-refiner-evaluations.d.ts.map +1 -1
  160. package/dist/types/packages/sdk/src/candidate-evaluation-client.d.ts +375 -351
  161. package/dist/types/packages/sdk/src/candidate-evaluation-client.d.ts.map +1 -1
  162. package/dist/types/packages/sdk/src/candidate-evaluations.d.ts +80 -54
  163. package/dist/types/packages/sdk/src/candidate-evaluations.d.ts.map +1 -1
  164. package/dist/types/packages/sdk/src/connected-collection-status.d.ts +5 -5
  165. package/dist/types/packages/sdk/src/connected-dataset-source.d.ts +10 -10
  166. package/dist/types/packages/sdk/src/connected-evidence-client.d.ts +464 -460
  167. package/dist/types/packages/sdk/src/connected-evidence-client.d.ts.map +1 -1
  168. package/dist/types/packages/sdk/src/connected-evidence-contracts.d.ts +23 -23
  169. package/dist/types/packages/sdk/src/connected-recorded-execution.d.ts +77 -74
  170. package/dist/types/packages/sdk/src/connected-recorded-execution.d.ts.map +1 -1
  171. package/dist/types/packages/sdk/src/connected-sync.d.ts +30 -30
  172. package/dist/types/packages/sdk/src/connected-sync.d.ts.map +1 -1
  173. package/dist/types/packages/sdk/src/dataset-commerce-contracts.d.ts +14 -14
  174. package/dist/types/packages/sdk/src/dataset-commerce-files.d.ts +5 -5
  175. package/dist/types/packages/sdk/src/dataset-commerce-files.d.ts.map +1 -1
  176. package/dist/types/packages/sdk/src/dataset-commerce-responses.d.ts +82 -82
  177. package/dist/types/packages/sdk/src/dataset-commerce.d.ts +58 -58
  178. package/dist/types/packages/sdk/src/dataset-commerce.d.ts.map +1 -1
  179. package/dist/types/packages/sdk/src/dataset-marketplace.d.ts +4 -4
  180. package/dist/types/packages/sdk/src/dataset-marketplace.d.ts.map +1 -1
  181. package/dist/types/packages/sdk/src/dataset-population.d.ts +10 -10
  182. package/dist/types/packages/sdk/src/dataset-population.d.ts.map +1 -1
  183. package/dist/types/packages/sdk/src/dataset-preparation-authoring-contracts.d.ts +172 -172
  184. package/dist/types/packages/sdk/src/dataset-preparation-client.d.ts +47 -47
  185. package/dist/types/packages/sdk/src/dataset-preparation-client.d.ts.map +1 -1
  186. package/dist/types/packages/sdk/src/dataset-preparation-contracts.d.ts +90 -90
  187. package/dist/types/packages/sdk/src/dataset-preparation-qualification-contracts.d.ts +7 -7
  188. package/dist/types/packages/sdk/src/dataset-preparation-research-contracts.d.ts +26 -26
  189. package/dist/types/packages/sdk/src/dataset-preparation-starting-state.d.ts +8 -8
  190. package/dist/types/packages/sdk/src/dataset-preparation-workspace.d.ts +111 -110
  191. package/dist/types/packages/sdk/src/dataset-preparation-workspace.d.ts.map +1 -1
  192. package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts +896 -889
  193. package/dist/types/packages/sdk/src/dataset-workspace-client.d.ts.map +1 -1
  194. package/dist/types/packages/sdk/src/dataset-workspace-contracts.d.ts +225 -223
  195. package/dist/types/packages/sdk/src/dataset-workspace-contracts.d.ts.map +1 -1
  196. package/dist/types/packages/sdk/src/dataset-workspace-operations.d.ts +226 -224
  197. package/dist/types/packages/sdk/src/dataset-workspace-operations.d.ts.map +1 -1
  198. package/dist/types/packages/sdk/src/evaluation-coordination-http.d.ts.map +1 -1
  199. package/dist/types/packages/sdk/src/evaluation-project-context.d.ts +1 -1
  200. package/dist/types/packages/sdk/src/experiment-client.d.ts +2102 -2014
  201. package/dist/types/packages/sdk/src/experiment-client.d.ts.map +1 -1
  202. package/dist/types/packages/sdk/src/experiment-contracts.d.ts +165 -113
  203. package/dist/types/packages/sdk/src/experiment-contracts.d.ts.map +1 -1
  204. package/dist/types/packages/sdk/src/experiment-evaluation-schedules.d.ts +587 -516
  205. package/dist/types/packages/sdk/src/experiment-evaluation-schedules.d.ts.map +1 -1
  206. package/dist/types/packages/sdk/src/experiment-execution-selection.d.ts +5 -5
  207. package/dist/types/packages/sdk/src/experiment-execution-selection.d.ts.map +1 -1
  208. package/dist/types/packages/sdk/src/experiment-field-mappings.d.ts +8 -8
  209. package/dist/types/packages/sdk/src/experiment-grading-contracts.d.ts +16 -16
  210. package/dist/types/packages/sdk/src/experiment-improvement-client.d.ts +2524 -2524
  211. package/dist/types/packages/sdk/src/experiment-improvement-client.d.ts.map +1 -1
  212. package/dist/types/packages/sdk/src/experiment-improvement-contracts.d.ts +1557 -1557
  213. package/dist/types/packages/sdk/src/experiment-improvement-hosted-adoption.d.ts +150 -150
  214. package/dist/types/packages/sdk/src/experiment-inspection.d.ts.map +1 -1
  215. package/dist/types/packages/sdk/src/experiment-run-contracts.d.ts +38 -25
  216. package/dist/types/packages/sdk/src/experiment-run-contracts.d.ts.map +1 -1
  217. package/dist/types/packages/sdk/src/experiment-run-details.d.ts +303 -243
  218. package/dist/types/packages/sdk/src/experiment-run-details.d.ts.map +1 -1
  219. package/dist/types/packages/sdk/src/experiment-scoring-contracts.d.ts +21 -21
  220. package/dist/types/packages/sdk/src/grader-inspection.d.ts +104 -104
  221. package/dist/types/packages/sdk/src/grader-inspection.d.ts.map +1 -1
  222. package/dist/types/packages/sdk/src/harness-experiment-policy.d.ts +33 -20
  223. package/dist/types/packages/sdk/src/harness-experiment-policy.d.ts.map +1 -1
  224. package/dist/types/packages/sdk/src/human-review-client.d.ts +288 -288
  225. package/dist/types/packages/sdk/src/human-review-client.d.ts.map +1 -1
  226. package/dist/types/packages/sdk/src/index.d.ts.map +1 -1
  227. package/dist/types/packages/sdk/src/learning-batch-assets.d.ts +15 -13
  228. package/dist/types/packages/sdk/src/learning-batch-assets.d.ts.map +1 -1
  229. package/dist/types/packages/sdk/src/learning-client.d.ts +5 -5
  230. package/dist/types/packages/sdk/src/learning-client.d.ts.map +1 -1
  231. package/dist/types/packages/sdk/src/learning-credentials.d.ts +4 -4
  232. package/dist/types/packages/sdk/src/learning-credentials.d.ts.map +1 -1
  233. package/dist/types/packages/sdk/src/managed-training-preparation.d.ts +69 -69
  234. package/dist/types/packages/sdk/src/managed-training-preparation.d.ts.map +1 -1
  235. package/dist/types/packages/sdk/src/model-batch-review-contracts.d.ts +65 -61
  236. package/dist/types/packages/sdk/src/model-batch-review-contracts.d.ts.map +1 -1
  237. package/dist/types/packages/sdk/src/model-batch-review-preparation.d.ts +74 -72
  238. package/dist/types/packages/sdk/src/model-batch-review-preparation.d.ts.map +1 -1
  239. package/dist/types/packages/sdk/src/model-batch-review.d.ts +96 -92
  240. package/dist/types/packages/sdk/src/model-batch-review.d.ts.map +1 -1
  241. package/dist/types/packages/sdk/src/model-bound-taskset-authoring.d.ts.map +1 -1
  242. package/dist/types/packages/sdk/src/model-learning-intent.d.ts +1 -1
  243. package/dist/types/packages/sdk/src/model-learning-policy.d.ts +247 -247
  244. package/dist/types/packages/sdk/src/model-learning-policy.d.ts.map +1 -1
  245. package/dist/types/packages/sdk/src/model-projects.d.ts +342 -322
  246. package/dist/types/packages/sdk/src/model-projects.d.ts.map +1 -1
  247. package/dist/types/packages/sdk/src/model-starter-attempts.d.ts +187 -187
  248. package/dist/types/packages/sdk/src/model-starter-attempts.d.ts.map +1 -1
  249. package/dist/types/packages/sdk/src/model-starter-catalog.d.ts +181 -179
  250. package/dist/types/packages/sdk/src/model-starter-catalog.d.ts.map +1 -1
  251. package/dist/types/packages/sdk/src/model-starter-execution.d.ts +40 -40
  252. package/dist/types/packages/sdk/src/model-starters.d.ts +291 -287
  253. package/dist/types/packages/sdk/src/model-starters.d.ts.map +1 -1
  254. package/dist/types/packages/sdk/src/model-taskset-authoring-contracts.d.ts +3 -3
  255. package/dist/types/packages/sdk/src/model-taskset-derivation.d.ts +114 -112
  256. package/dist/types/packages/sdk/src/model-taskset-derivation.d.ts.map +1 -1
  257. package/dist/types/packages/sdk/src/model-taskset-resources.d.ts +18 -18
  258. package/dist/types/packages/sdk/src/model-taskset-runs-contracts.d.ts +179 -127
  259. package/dist/types/packages/sdk/src/model-taskset-runs-contracts.d.ts.map +1 -1
  260. package/dist/types/packages/sdk/src/model-taskset-runs.d.ts +865 -833
  261. package/dist/types/packages/sdk/src/model-taskset-runs.d.ts.map +1 -1
  262. package/dist/types/packages/sdk/src/post-training.d.ts +444 -375
  263. package/dist/types/packages/sdk/src/post-training.d.ts.map +1 -1
  264. package/dist/types/packages/sdk/src/profile-actions.d.ts.map +1 -1
  265. package/dist/types/packages/sdk/src/profile-evaluation-discovery.d.ts +150 -150
  266. package/dist/types/packages/sdk/src/profile-evaluation-discovery.d.ts.map +1 -1
  267. package/dist/types/packages/sdk/src/profile-external-dataset-package.d.ts +254 -251
  268. package/dist/types/packages/sdk/src/profile-external-dataset-package.d.ts.map +1 -1
  269. package/dist/types/packages/sdk/src/project-actions.d.ts.map +1 -1
  270. package/dist/types/packages/sdk/src/protocol.d.ts.map +1 -1
  271. package/dist/types/packages/sdk/src/run-diagnostics.d.ts +3 -3
  272. package/dist/types/packages/sdk/src/task-design-contracts.d.ts +50 -50
  273. package/dist/types/packages/sdk/src/task-inventory.d.ts +4 -4
  274. package/dist/types/packages/sdk/src/task-inventory.d.ts.map +1 -1
  275. package/dist/types/packages/sdk/src/taskset-authored-contracts.d.ts +190 -189
  276. package/dist/types/packages/sdk/src/taskset-authored-contracts.d.ts.map +1 -1
  277. package/dist/types/packages/sdk/src/taskset-authored-files.d.ts +149 -148
  278. package/dist/types/packages/sdk/src/taskset-authored-files.d.ts.map +1 -1
  279. package/dist/types/packages/sdk/src/taskset-authored-portable-release.d.ts +15 -6
  280. package/dist/types/packages/sdk/src/taskset-authored-portable-release.d.ts.map +1 -1
  281. package/dist/types/packages/sdk/src/taskset-calibration-fixtures.d.ts +64 -63
  282. package/dist/types/packages/sdk/src/taskset-calibration-fixtures.d.ts.map +1 -1
  283. package/dist/types/packages/sdk/src/taskset-catalog.d.ts.map +1 -1
  284. package/dist/types/packages/sdk/src/taskset-draft-api-contracts.d.ts +245 -243
  285. package/dist/types/packages/sdk/src/taskset-draft-api-contracts.d.ts.map +1 -1
  286. package/dist/types/packages/sdk/src/taskset-draft-authoring.d.ts.map +1 -1
  287. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts +745 -738
  288. package/dist/types/packages/sdk/src/taskset-draft-client.d.ts.map +1 -1
  289. package/dist/types/packages/sdk/src/taskset-draft-core.d.ts +133 -131
  290. package/dist/types/packages/sdk/src/taskset-draft-core.d.ts.map +1 -1
  291. package/dist/types/packages/sdk/src/taskset-draft-dataset-artifacts.d.ts +80 -80
  292. package/dist/types/packages/sdk/src/taskset-draft-dataset-sources.d.ts +34 -34
  293. package/dist/types/packages/sdk/src/taskset-draft-document.d.ts +119 -117
  294. package/dist/types/packages/sdk/src/taskset-draft-document.d.ts.map +1 -1
  295. package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts +500 -492
  296. package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts.map +1 -1
  297. package/dist/types/packages/sdk/src/taskset-draft-source.d.ts +236 -234
  298. package/dist/types/packages/sdk/src/taskset-draft-source.d.ts.map +1 -1
  299. package/dist/types/packages/sdk/src/taskset-draft-workspace.d.ts +228 -224
  300. package/dist/types/packages/sdk/src/taskset-draft-workspace.d.ts.map +1 -1
  301. package/dist/types/packages/sdk/src/taskset-intake.d.ts +1 -1
  302. package/dist/types/packages/sdk/src/taskset-package-client.d.ts +4600 -4576
  303. package/dist/types/packages/sdk/src/taskset-package-client.d.ts.map +1 -1
  304. package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts +2068 -2054
  305. package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts.map +1 -1
  306. package/dist/types/packages/sdk/src/taskset-package-files.d.ts +1 -1
  307. package/dist/types/packages/sdk/src/taskset-package-grader-projection.d.ts +21 -21
  308. package/dist/types/packages/sdk/src/taskset-package-learning.d.ts +88 -86
  309. package/dist/types/packages/sdk/src/taskset-package-learning.d.ts.map +1 -1
  310. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts +387 -383
  311. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts.map +1 -1
  312. package/dist/types/packages/sdk/src/training-acceptance.d.ts +26 -26
  313. package/dist/types/packages/sdk/src/training-acceptance.d.ts.map +1 -1
  314. package/dist/types/packages/sdk/src/training-bundle-contracts.d.ts +14 -10
  315. package/dist/types/packages/sdk/src/training-bundle-contracts.d.ts.map +1 -1
  316. package/dist/types/packages/sdk/src/training-bundle.d.ts +2 -0
  317. package/dist/types/packages/sdk/src/training-bundle.d.ts.map +1 -1
  318. package/dist/types/packages/sdk/src/training-candidate-decisions.d.ts +2 -2
  319. package/dist/types/packages/sdk/src/training-candidate-decisions.d.ts.map +1 -1
  320. package/dist/types/packages/sdk/src/training-evaluation-results.d.ts +3 -3
  321. package/dist/types/packages/sdk/src/training-evaluation-source.d.ts +1 -1
  322. package/dist/types/packages/sdk/src/training-evaluation-source.d.ts.map +1 -1
  323. package/dist/types/packages/sdk/src/training-grading-plan.d.ts.map +1 -1
  324. package/dist/types/packages/sdk/src/training-harness-sources.d.ts +14 -14
  325. package/dist/types/packages/sdk/src/training-harness-sources.d.ts.map +1 -1
  326. package/dist/types/packages/sdk/src/training-learning-batch.d.ts +344 -340
  327. package/dist/types/packages/sdk/src/training-learning-batch.d.ts.map +1 -1
  328. package/dist/types/packages/sdk/src/training-preparations.d.ts +700 -700
  329. package/dist/types/packages/sdk/src/training-preparations.d.ts.map +1 -1
  330. package/dist/types/packages/sdk/src/training-project-client.d.ts +272 -272
  331. package/dist/types/packages/sdk/src/training-project-client.d.ts.map +1 -1
  332. package/dist/types/packages/sdk/src/training-project-contracts.d.ts +161 -161
  333. package/dist/types/packages/sdk/src/training-qualification-preparation.d.ts +75 -71
  334. package/dist/types/packages/sdk/src/training-qualification-preparation.d.ts.map +1 -1
  335. package/dist/types/packages/sdk/src/training.d.ts +1442 -1416
  336. package/dist/types/packages/sdk/src/training.d.ts.map +1 -1
  337. package/dist/types/packages/sdk/src/work.d.ts +4 -0
  338. package/dist/types/packages/sdk/src/work.d.ts.map +1 -1
  339. package/dist/types/packages/sdk/src/workflows.d.ts.map +1 -1
  340. package/dist/workflows.js +3 -2
  341. package/dist/workflows.js.map +1 -7
  342. package/package.json +3 -3
  343. package/dist/chunk-2DMYAJLS.js.map +0 -7
  344. package/dist/chunk-2U54EOXJ.js.map +0 -7
  345. package/dist/chunk-36WJTS5V.js.map +0 -7
  346. package/dist/chunk-3KXDH6OB.js.map +0 -7
  347. package/dist/chunk-3LP7DNLQ.js.map +0 -7
  348. package/dist/chunk-6Q4I33CH.js.map +0 -7
  349. package/dist/chunk-77N3QEIL.js.map +0 -7
  350. package/dist/chunk-AG5DDL7T.js.map +0 -7
  351. package/dist/chunk-BFR3VC25.js.map +0 -7
  352. package/dist/chunk-BSK3VLM3.js.map +0 -7
  353. package/dist/chunk-CEZEVILU.js.map +0 -7
  354. package/dist/chunk-CK3ONRRC.js.map +0 -7
  355. package/dist/chunk-COPVBJPL.js.map +0 -7
  356. package/dist/chunk-CTVKI3BV.js.map +0 -7
  357. package/dist/chunk-CWXM57QR.js.map +0 -7
  358. package/dist/chunk-DUKW3R7O.js.map +0 -7
  359. package/dist/chunk-FHCSDXIA.js +0 -1417
  360. package/dist/chunk-FHCSDXIA.js.map +0 -7
  361. package/dist/chunk-FY7NHCEH.js.map +0 -7
  362. package/dist/chunk-G53MA5XX.js.map +0 -7
  363. package/dist/chunk-G6Y6CQYV.js.map +0 -7
  364. package/dist/chunk-HKWX624G.js.map +0 -7
  365. package/dist/chunk-IWT6JUZD.js.map +0 -7
  366. package/dist/chunk-K3JCP4FO.js.map +0 -7
  367. package/dist/chunk-K5WRVSOL.js.map +0 -7
  368. package/dist/chunk-KAE7AMYE.js.map +0 -7
  369. package/dist/chunk-MEKWESBF.js.map +0 -7
  370. package/dist/chunk-MLPPSCDQ.js.map +0 -7
  371. package/dist/chunk-O4GE6VTR.js.map +0 -7
  372. package/dist/chunk-P27DQ65Z.js.map +0 -7
  373. package/dist/chunk-QEIT5VXJ.js.map +0 -7
  374. package/dist/chunk-QTJQIHDZ.js.map +0 -7
  375. package/dist/chunk-ROBAX5TN.js.map +0 -7
  376. package/dist/chunk-T4APHDES.js.map +0 -7
  377. package/dist/chunk-TCHAWJMB.js.map +0 -7
  378. package/dist/chunk-TMUAKJWX.js.map +0 -7
  379. package/dist/chunk-TSMGMA6R.js.map +0 -7
  380. package/dist/chunk-UPS52OPZ.js.map +0 -7
  381. package/dist/chunk-VY5AFE7A.js.map +0 -7
  382. package/dist/chunk-XYQD4LDI.js.map +0 -7
  383. package/dist/chunk-YCQVVFE5.js.map +0 -7
  384. package/dist/chunk-YUKV7RCD.js.map +0 -7
  385. package/dist/chunk-YVUIHH6Z.js.map +0 -7
  386. package/dist/chunk-ZJ3H3VS7.js.map +0 -7
@@ -3,7 +3,8 @@ import {
3
3
  isProjectActionDefinition,
4
4
  loadProjectActionConfiguration,
5
5
  resolveProjectActionRuntime
6
- } from "./chunk-P27DQ65Z.js";
6
+ } from "./chunk-OVGDDKO2.js";
7
+ import "./chunk-YLJ4XMA6.js";
7
8
 
8
9
  // ../actions/src/local.ts
9
10
  import { randomUUID } from "node:crypto";
@@ -1,7 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../actions/src/local.ts", "../../actions/src/build.ts", "../../actions/src/schema.ts", "../../actions/src/catalog.ts", "../../actions/src/discovery.ts", "../../actions/src/hash.ts", "../../actions/src/setup.ts"],
4
- "sourcesContent": ["import { randomUUID } from \"node:crypto\";\nimport { spawn } from \"node:child_process\";\nimport { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nimport {\n DEFAULT_PROJECT_ACTION_OUTPUT_DIRECTORY,\n buildProjectActions,\n} from \"./build.js\";\nimport {\n loadProjectActionConfiguration,\n resolveProjectActionRuntime,\n} from \"./configuration.js\";\nimport type {\n LocalProjectActionRunner,\n ProjectActionBuildResult,\n ProjectActionRegistry,\n ProjectActionRunRequest,\n ProjectActionRunResult,\n ProjectActionRunnerOptions,\n} from \"./types.js\";\nimport { validateProjectActionRunSetup } from \"./setup.js\";\n\nconst localConcurrency = new Map<string, { active: number; waiting: Array<() => void> }>();\n\nexport function createLocalActionRunner(\n options: ProjectActionRunnerOptions,\n): LocalProjectActionRunner {\n const projectRoot = path.resolve(options.projectRoot);\n const buildPolicy = options.build ?? \"if-missing\";\n let currentBuild: ProjectActionBuildResult | null = null;\n\n const ensureBuild = async (): Promise<ProjectActionBuildResult> => {\n if (buildPolicy === \"always\") return runBuild();\n if (currentBuild) return currentBuild;\n if (buildPolicy === \"never\" || buildPolicy === \"if-missing\") {\n const configuration = await loadProjectActionConfiguration(projectRoot);\n const outputDirectory = path.resolve(\n projectRoot,\n options.outputDirectory ?? configuration.outputDirectory ?? DEFAULT_PROJECT_ACTION_OUTPUT_DIRECTORY,\n );\n const loaded = await loadBuild(projectRoot, outputDirectory);\n if (loaded) return (currentBuild = loaded);\n if (buildPolicy === \"never\") {\n throw new Error(`Project Actions have not been built in ${outputDirectory}.`);\n }\n }\n return runBuild();\n };\n const runBuild = async () => {\n currentBuild = await buildProjectActions({\n projectRoot,\n sourceDirectory: options.sourceDirectory,\n outputDirectory: options.outputDirectory,\n });\n return currentBuild;\n };\n\n return {\n build: runBuild,\n async catalog() {\n return (await ensureBuild()).registry;\n },\n async run<TOutput>(request: ProjectActionRunRequest) {\n const built = await ensureBuild();\n const catalogAction = built.registry.actions.find((action) => action.id === request.actionId);\n if (!catalogAction) throw new Error(`Unknown Project Action: ${request.actionId}`);\n const configuredRuntime = resolveProjectActionRuntime(\n await loadProjectActionConfiguration(projectRoot),\n );\n const resolvedRequest: ProjectActionRunRequest = {\n ...request,\n environment: {\n ...configuredRuntime.environment,\n ...(request.environment ?? {}),\n },\n connections: {\n ...configuredRuntime.connections,\n ...(request.connections ?? {}),\n },\n };\n await validateProjectActionRunSetup(projectRoot, catalogAction.setupRequirements, resolvedRequest);\n const runId = request.runId?.trim() || randomUUID();\n const actionOutputDirectory = path.resolve(\n request.outputDirectory ?? path.join(projectRoot, \".openpond\", \"outputs\", runId),\n );\n assertWithinProject(projectRoot, actionOutputDirectory, \"Project Action output directory\");\n await fs.mkdir(actionOutputDirectory, { recursive: true });\n const release = await acquireLocalActionSlot(\n `${projectRoot}\\0${request.actionId}`,\n catalogAction.implementation.concurrency,\n resolvedRequest.signal,\n );\n const responseFile = path.join(built.outputDirectory, `.run-${randomUUID()}.json`);\n const startedAt = Date.now();\n let childResult: Awaited<ReturnType<typeof executeChild>>;\n let payload: {\n ok: true;\n output: TOutput;\n traces: ProjectActionRunResult[\"traces\"];\n outputs: ProjectActionRunResult[\"outputs\"];\n };\n try {\n childResult = await executeChild({\n runnerPath: built.runnerPath,\n cwd: projectRoot,\n signal: resolvedRequest.signal,\n request: {\n actionId: request.actionId,\n input: resolvedRequest.input ?? {},\n runId,\n idempotencyKey: resolvedRequest.idempotencyKey ?? null,\n timeoutMs: resolvedRequest.timeoutMs,\n projectRoot,\n outputDirectory: actionOutputDirectory,\n responseFile,\n environment: resolvedRequest.environment ?? {},\n connections: resolvedRequest.connections ?? {},\n },\n });\n payload = JSON.parse(await fs.readFile(responseFile, \"utf8\")) as typeof payload;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(redactRuntimeValues(message, resolvedRequest));\n } finally {\n await fs.rm(responseFile, { force: true }).catch(() => undefined);\n release();\n }\n return {\n runId,\n actionId: request.actionId,\n status: \"succeeded\",\n output: payload.output,\n stdout: redactRuntimeValues(childResult.stdout, resolvedRequest),\n stderr: redactRuntimeValues(childResult.stderr, resolvedRequest),\n traces: redactRuntimeValue(payload.traces, resolvedRequest),\n outputs: redactRuntimeValue(payload.outputs, resolvedRequest),\n outputDirectory: actionOutputDirectory,\n durationMs: Date.now() - startedAt,\n } satisfies ProjectActionRunResult<TOutput>;\n },\n };\n}\n\nasync function acquireLocalActionSlot(\n key: string,\n limit: number | null,\n signal?: AbortSignal,\n): Promise<() => void> {\n if (limit === null) return () => undefined;\n const state = localConcurrency.get(key) ?? { active: 0, waiting: [] };\n localConcurrency.set(key, state);\n if (state.active >= limit) {\n await new Promise<void>((resolve, reject) => {\n const resume = () => {\n signal?.removeEventListener(\"abort\", abort);\n resolve();\n };\n const abort = () => {\n const index = state.waiting.indexOf(resume);\n if (index >= 0) state.waiting.splice(index, 1);\n reject(signal?.reason instanceof Error ? signal.reason : new Error(\"Project Action was cancelled.\"));\n };\n if (signal?.aborted) {\n abort();\n return;\n }\n state.waiting.push(resume);\n signal?.addEventListener(\"abort\", abort, { once: true });\n });\n } else {\n state.active += 1;\n }\n let released = false;\n return () => {\n if (released) return;\n released = true;\n const next = state.waiting.shift();\n if (next) {\n next();\n return;\n }\n state.active -= 1;\n if (state.active === 0 && state.waiting.length === 0) localConcurrency.delete(key);\n };\n}\n\nasync function loadBuild(\n projectRoot: string,\n outputDirectory: string,\n): Promise<ProjectActionBuildResult | null> {\n const manifestPath = path.join(outputDirectory, \"build-manifest.json\");\n const registryPath = path.join(outputDirectory, \"action-registry.json\");\n const [manifestText, registryText] = await Promise.all([\n fs.readFile(manifestPath, \"utf8\").catch(() => null),\n fs.readFile(registryPath, \"utf8\").catch(() => null),\n ]);\n if (!manifestText || !registryText) return null;\n const manifest = JSON.parse(manifestText) as ProjectActionBuildResult[\"manifest\"];\n const registry = JSON.parse(registryText) as ProjectActionRegistry;\n return {\n projectRoot,\n outputDirectory,\n bundlePath: path.join(outputDirectory, manifest.bundleFile),\n runnerPath: path.join(outputDirectory, manifest.runnerFile),\n registryPath,\n manifestPath,\n registry,\n manifest,\n };\n}\n\nfunction redactRuntimeValues(value: string, request: ProjectActionRunRequest): string {\n let redacted = value;\n for (const secret of runtimeStringValues(request)) {\n if (secret.length >= 4) redacted = redacted.split(secret).join(\"[REDACTED]\");\n }\n return redacted;\n}\n\nfunction redactRuntimeValue<T>(value: T, request: ProjectActionRunRequest): T {\n const serialized = JSON.stringify(value);\n return JSON.parse(redactRuntimeValues(serialized, request)) as T;\n}\n\nfunction runtimeStringValues(request: ProjectActionRunRequest): string[] {\n const values = new Set<string>(Object.values(request.environment ?? {}));\n const visit = (value: unknown) => {\n if (typeof value === \"string\") values.add(value);\n else if (Array.isArray(value)) value.forEach(visit);\n else if (value && typeof value === \"object\") Object.values(value).forEach(visit);\n };\n visit(request.connections ?? {});\n return [...values].filter(Boolean).sort((left, right) => right.length - left.length);\n}\n\nfunction executeChild(input: {\n runnerPath: string;\n cwd: string;\n signal?: AbortSignal;\n request: Record<string, unknown>;\n}): Promise<{ stdout: string; stderr: string }> {\n return new Promise((resolve, reject) => {\n if (input.signal?.aborted) {\n reject(input.signal.reason instanceof Error ? input.signal.reason : new Error(\"Project Action was cancelled.\"));\n return;\n }\n let requestJson: string;\n try {\n requestJson = JSON.stringify(input.request);\n } catch (error) {\n reject(new Error(`Project Action request is not serializable: ${error instanceof Error ? error.message : String(error)}`));\n return;\n }\n const child = spawn(process.execPath, [input.runnerPath], {\n cwd: input.cwd,\n env: minimalEnvironment(),\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n let stdout = \"\";\n let stderr = \"\";\n child.stdout.setEncoding(\"utf8\");\n child.stderr.setEncoding(\"utf8\");\n child.stdout.on(\"data\", (chunk: string) => { stdout += chunk; });\n child.stderr.on(\"data\", (chunk: string) => { stderr += chunk; });\n const abort = () => child.kill(\"SIGTERM\");\n input.signal?.addEventListener(\"abort\", abort, { once: true });\n child.once(\"error\", reject);\n child.once(\"close\", (code, signal) => {\n input.signal?.removeEventListener(\"abort\", abort);\n if (input.signal?.aborted) {\n reject(input.signal.reason instanceof Error ? input.signal.reason : new Error(\"Project Action was cancelled.\"));\n return;\n }\n if (code !== 0) {\n reject(new Error(`Project Action process failed (${code ?? signal ?? \"unknown\"}): ${stderr.trim() || stdout.trim()}`));\n return;\n }\n resolve({ stdout, stderr });\n });\n child.stdin.end(requestJson);\n });\n}\n\nfunction assertWithinProject(projectRoot: string, target: string, label: string): void {\n const relative = path.relative(projectRoot, target);\n if (relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n throw new Error(`${label} must stay inside the Project root.`);\n }\n}\n\nfunction minimalEnvironment(): NodeJS.ProcessEnv {\n const env: NodeJS.ProcessEnv = {};\n for (const name of [\"PATH\", \"SystemRoot\", \"WINDIR\", \"TMPDIR\", \"TEMP\", \"TMP\"]) {\n if (process.env[name] !== undefined) env[name] = process.env[name];\n }\n return env;\n}\n\nexport { buildProjectActions } from \"./build.js\";\nexport {\n loadProjectActionConfiguration,\n PROJECT_ACTION_CONFIG_PATH,\n resolveProjectActionRuntime,\n} from \"./configuration.js\";\nexport type {\n LocalProjectActionRunner,\n ProjectActionBuildManifest,\n ProjectActionBuildResult,\n ProjectActionCatalogEntry,\n ProjectActionRegistry,\n ProjectActionRunRequest,\n ProjectActionRunResult,\n ProjectActionRunnerOptions,\n} from \"./types.js\";\n", "import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\n\nimport { build } from \"esbuild\";\n\nimport { collectProjectActions, createProjectActionRegistry } from \"./catalog.js\";\nimport { loadProjectActionConfiguration } from \"./configuration.js\";\nimport { discoverProjectActionFiles } from \"./discovery.js\";\nimport { canonicalJson, sha256 } from \"./hash.js\";\nimport { validateProjectActionStaticSetup } from \"./setup.js\";\nimport type {\n ProjectActionBuildManifest,\n ProjectActionBuildResult,\n ProjectActionDefinition,\n} from \"./types.js\";\n\nexport const DEFAULT_PROJECT_ACTION_OUTPUT_DIRECTORY = \".openpond/actions\";\n\nexport async function buildProjectActions(input: {\n projectRoot: string;\n sourceDirectory?: string;\n outputDirectory?: string;\n}): Promise<ProjectActionBuildResult> {\n const configuration = await loadProjectActionConfiguration(input.projectRoot);\n const discovered = await discoverProjectActionFiles({\n projectRoot: input.projectRoot,\n sourceDirectory: input.sourceDirectory ?? configuration.sourceDirectory,\n });\n const outputDirectory = path.resolve(\n discovered.projectRoot,\n input.outputDirectory ?? configuration.outputDirectory ?? DEFAULT_PROJECT_ACTION_OUTPUT_DIRECTORY,\n );\n assertWithinProject(discovered.projectRoot, outputDirectory);\n await fs.mkdir(outputDirectory, { recursive: true });\n\n const entryPath = path.join(outputDirectory, \"entry.mjs\");\n const bundlePath = path.join(outputDirectory, \"bundle.mjs\");\n const runnerPath = path.join(outputDirectory, \"runner.mjs\");\n const registryPath = path.join(outputDirectory, \"action-registry.json\");\n const manifestPath = path.join(outputDirectory, \"build-manifest.json\");\n const imports = discovered.files.map((file, index) => {\n const relative = path.relative(outputDirectory, path.join(discovered.projectRoot, file)).split(path.sep).join(\"/\");\n const specifier = relative.startsWith(\".\") ? relative : `./${relative}`;\n return `import * as actionModule${index} from ${JSON.stringify(specifier)};`;\n });\n const modules = discovered.files.map((_file, index) => `actionModule${index}`).join(\", \");\n await fs.writeFile(\n entryPath,\n [\n ...imports,\n `export const projectActionModules = [${modules}];`,\n \"export default projectActionModules;\",\n \"\",\n ].join(\"\\n\"),\n \"utf8\",\n );\n await build({\n entryPoints: [entryPath],\n outfile: bundlePath,\n bundle: true,\n platform: \"node\",\n format: \"esm\",\n target: \"node22.14\",\n sourcemap: false,\n legalComments: \"none\",\n logLevel: \"silent\",\n nodePaths: dependencySearchPaths(discovered.projectRoot),\n });\n const cacheKey = `openpond_action_build=${Date.now()}_${Math.random().toString(16).slice(2)}`;\n const loaded = await import(`${pathToFileURL(bundlePath).href}?${cacheKey}`) as {\n projectActionModules?: unknown[];\n default?: unknown[];\n };\n const actions = collectProjectActions(loaded.projectActionModules ?? loaded.default ?? []);\n for (const action of actions) {\n await validateProjectActionStaticSetup(discovered.projectRoot, action.setup);\n }\n const registry = createProjectActionRegistry(actions);\n await fs.writeFile(registryPath, canonicalJson(registry), \"utf8\");\n await fs.writeFile(runnerPath, runtimeSource(), { encoding: \"utf8\", mode: 0o755 });\n\n const bundleHash = sha256(await fs.readFile(bundlePath));\n const registryHash = sha256(canonicalJson(registry));\n const manifest: ProjectActionBuildManifest = {\n schemaVersion: \"openpond.projectActionBuild.v1\",\n sourceDirectory: path.relative(discovered.projectRoot, discovered.sourceRoot).split(path.sep).join(\"/\"),\n sourceFiles: discovered.files,\n bundleFile: path.basename(bundlePath),\n runnerFile: path.basename(runnerPath),\n registryFile: path.basename(registryPath),\n bundleHash,\n registryHash,\n };\n await fs.writeFile(manifestPath, canonicalJson(manifest), \"utf8\");\n await fs.rm(entryPath, { force: true });\n return {\n projectRoot: discovered.projectRoot,\n outputDirectory,\n bundlePath,\n runnerPath,\n registryPath,\n manifestPath,\n registry,\n manifest,\n };\n}\n\nfunction dependencySearchPaths(projectRoot: string): string[] {\n const candidates: string[] = [];\n let current = projectRoot;\n while (true) {\n candidates.push(path.join(current, \"node_modules\"));\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n candidates.push(path.resolve(path.dirname(fileURLToPath(import.meta.url)), \"../../../node_modules\"));\n return [...new Set(candidates)];\n}\n\nexport async function loadBuiltProjectActions(\n bundlePath: string,\n): Promise<ProjectActionDefinition[]> {\n const stats = await fs.stat(bundlePath).catch(() => null);\n if (!stats?.isFile()) throw new Error(`Project Action bundle does not exist: ${bundlePath}`);\n const loaded = await import(`${pathToFileURL(bundlePath).href}?openpond_action_load=${Date.now()}`) as {\n projectActionModules?: unknown[];\n default?: unknown[];\n };\n return collectProjectActions(loaded.projectActionModules ?? loaded.default ?? []);\n}\n\nfunction assertWithinProject(projectRoot: string, target: string): void {\n const relative = path.relative(projectRoot, target);\n if (relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n throw new Error(\"Project Action output directory must stay inside the Project root.\");\n }\n}\n\nfunction runtimeSource(): string {\n return `#!/usr/bin/env node\nimport { promises as fs } from \"node:fs\";\nimport { stdin } from \"node:process\";\nimport path from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\n\nlet requestText = \"\";\nstdin.setEncoding(\"utf8\");\nfor await (const chunk of stdin) requestText += chunk;\nconst request = JSON.parse(requestText);\nconst bundlePath = path.resolve(path.dirname(fileURLToPath(import.meta.url)), \"bundle.mjs\");\nconst loaded = await import(pathToFileURL(bundlePath).href);\nconst values = [];\nconst seen = new Set();\nconst visit = (value) => {\n if (seen.has(value)) return;\n if (value && (typeof value === \"object\" || typeof value === \"function\")) seen.add(value);\n if (value?.kind === \"openpond-project-action\" && typeof value.run === \"function\") { values.push(value); return; }\n if (Array.isArray(value)) { value.forEach(visit); return; }\n if (value && typeof value === \"object\") Object.values(value).forEach(visit);\n};\n(loaded.projectActionModules ?? loaded.default ?? []).forEach(visit);\nconst action = values.find((candidate) => candidate.id === request.actionId);\nif (!action) throw new Error(\\`Unknown Project Action: \\${request.actionId}\\`);\nconst controller = new AbortController();\nconst timeoutMs = Math.min(request.timeoutMs ?? action.timeoutMs, action.timeoutMs);\nconst timer = setTimeout(() => controller.abort(new Error(\\`Project Action timed out after \\${timeoutMs}ms.\\`)), timeoutMs);\nconst traces = [];\nconst outputs = [];\nconst env = request.environment ?? {};\nconst connections = request.connections ?? {};\nconst context = {\n runId: request.runId,\n actionId: action.id,\n idempotencyKey: request.idempotencyKey ?? null,\n projectRoot: request.projectRoot,\n outputDirectory: request.outputDirectory,\n signal: controller.signal,\n env(name) { return Object.prototype.hasOwnProperty.call(env, name) ? env[name] : undefined; },\n connection(name) {\n if (!Object.prototype.hasOwnProperty.call(connections, name)) throw new Error(\\`Project Action connection is not configured: \\${name}\\`);\n return connections[name];\n },\n trace(name, payload) { traces.push({ name, ...(payload ? { payload } : {}), timestamp: new Date().toISOString() }); },\n output(value) {\n if (!value || typeof value.path !== \"string\" || !value.path.trim()) throw new Error(\"Project Action output requires a path.\");\n const outputPath = path.resolve(request.outputDirectory, value.path);\n const relative = path.relative(request.outputDirectory, outputPath);\n if (relative.startsWith(\"..\") || path.isAbsolute(relative)) throw new Error(\"Project Action output must stay inside the run output directory.\");\n outputs.push({ ...value, path: relative.split(path.sep).join(\"/\") });\n },\n};\ntry {\n const input = action.inputSchema.parse(request.input ?? {});\n const result = await Promise.race([\n Promise.resolve(action.run(context, input)),\n new Promise((_, reject) => controller.signal.addEventListener(\"abort\", () => reject(controller.signal.reason), { once: true })),\n ]);\n const output = action.outputSchema.parse(result);\n for (const artifact of outputs) {\n const stats = await fs.stat(path.resolve(request.outputDirectory, artifact.path)).catch(() => null);\n if (!stats?.isFile()) throw new Error(\\`Project Action output does not exist: \\${artifact.path}\\`);\n }\n await fs.writeFile(request.responseFile, JSON.stringify({ ok: true, output, traces, outputs }), \"utf8\");\n} finally {\n clearTimeout(timer);\n}\n`;\n}\n", "import { z } from \"zod\";\n\nimport type { ProjectActionSchema } from \"./types.js\";\n\nexport function projectActionJsonSchema(schema: ProjectActionSchema): Record<string, unknown> {\n return z.toJSONSchema(schema, { unrepresentable: \"any\" }) as Record<string, unknown>;\n}\n\nexport function parseProjectActionValue(schema: ProjectActionSchema, value: unknown): unknown {\n return schema.parse(value);\n}\n", "import { isProjectActionDefinition } from \"./define-action.js\";\nimport { projectActionJsonSchema } from \"./schema.js\";\nimport type {\n ProjectActionCatalogEntry,\n ProjectActionDefinition,\n ProjectActionRegistry,\n} from \"./types.js\";\n\nexport function collectProjectActions(modules: unknown[]): ProjectActionDefinition[] {\n const actions: ProjectActionDefinition[] = [];\n const seenObjects = new Set<unknown>();\n const visit = (value: unknown) => {\n if (seenObjects.has(value)) return;\n if (value && (typeof value === \"object\" || typeof value === \"function\")) seenObjects.add(value);\n if (isProjectActionDefinition(value)) {\n actions.push(value);\n return;\n }\n if (Array.isArray(value)) {\n value.forEach(visit);\n return;\n }\n if (value && typeof value === \"object\") Object.values(value).forEach(visit);\n };\n modules.forEach(visit);\n const byId = new Map<string, ProjectActionDefinition>();\n for (const action of actions) {\n if (byId.has(action.id)) throw new Error(`Duplicate Project Action id: ${action.id}`);\n byId.set(action.id, action);\n }\n return [...byId.values()].sort((left, right) => left.id.localeCompare(right.id));\n}\n\nexport function createProjectActionRegistry(\n actions: readonly ProjectActionDefinition[],\n): ProjectActionRegistry {\n return {\n schemaVersion: \"openpond.projectActionRegistry.v1\",\n actions: actions.map(toCatalogEntry),\n };\n}\n\nfunction toCatalogEntry(action: ProjectActionDefinition): ProjectActionCatalogEntry {\n return {\n id: action.id,\n sourceActionId: action.id,\n name: action.id,\n label: action.label,\n description: action.description,\n visibility: \"default\",\n inputSchema: projectActionJsonSchema(action.inputSchema),\n outputSchema: projectActionJsonSchema(action.outputSchema),\n approvalPolicy: {\n ...action.approval,\n required: action.approval.mode === \"always\" || action.approval.mode === \"sensitive\" ||\n (action.approval.mode === \"writes\" && action.behavior === \"write\"),\n risk: action.behavior,\n },\n artifactPolicy: {\n outputArtifacts: [],\n persistRunSummary: true,\n persistTrace: true,\n },\n setupRequirements: [...action.setup],\n mcp: { enabled: false },\n schedulePolicy: { enabled: false, allowAdHoc: true },\n trace: { name: action.id, namespace: \"project-actions\" },\n implementation: {\n type: \"openpond-project-action\",\n actionId: action.id,\n behavior: action.behavior,\n timeoutMs: action.timeoutMs,\n concurrency: action.concurrency,\n },\n invokesModel: action.invokesModel,\n };\n}\n", "import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nconst ACTION_FILE = /\\.(?:[cm]?[jt]s)$/i;\nconst IGNORED_FILE = /(?:\\.d\\.ts|\\.test\\.[cm]?[jt]s|\\.spec\\.[cm]?[jt]s)$/i;\n\nexport async function discoverProjectActionFiles(input: {\n projectRoot: string;\n sourceDirectory?: string;\n}): Promise<{ projectRoot: string; sourceRoot: string; files: string[] }> {\n const projectRoot = path.resolve(input.projectRoot);\n const sourceRoot = path.resolve(projectRoot, input.sourceDirectory ?? \"openpond/actions\");\n if (!isWithin(projectRoot, sourceRoot)) {\n throw new Error(\"Project Action source directory must stay inside the Project root.\");\n }\n const stats = await fs.stat(sourceRoot).catch(() => null);\n if (!stats?.isDirectory()) {\n throw new Error(`Project Action source directory does not exist: ${sourceRoot}`);\n }\n const files = await walk(sourceRoot);\n const actions = files\n .filter((file) => ACTION_FILE.test(file) && !IGNORED_FILE.test(file))\n .map((file) => path.relative(projectRoot, file).split(path.sep).join(\"/\"))\n .sort();\n if (actions.length === 0) {\n throw new Error(`No Project Action files were found under ${sourceRoot}.`);\n }\n return { projectRoot, sourceRoot, files: actions };\n}\n\nasync function walk(directory: string): Promise<string[]> {\n const entries = await fs.readdir(directory, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries.sort((left, right) => left.name.localeCompare(right.name))) {\n if (entry.name.startsWith(\".\") || entry.name === \"node_modules\") continue;\n const target = path.join(directory, entry.name);\n if (entry.isDirectory()) files.push(...(await walk(target)));\n else if (entry.isFile()) files.push(target);\n }\n return files;\n}\n\nfunction isWithin(root: string, target: string): boolean {\n const relative = path.relative(root, target);\n return relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative));\n}\n", "import { createHash } from \"node:crypto\";\n\nexport function sha256(value: string | Uint8Array): string {\n return createHash(\"sha256\").update(value).digest(\"hex\");\n}\n\nexport function canonicalJson(value: unknown): string {\n return `${JSON.stringify(sortValue(value), null, 2)}\\n`;\n}\n\nfunction sortValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(sortValue);\n if (!value || typeof value !== \"object\") return value;\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, child]) => [key, sortValue(child)]),\n );\n}\n", "import { promises as fs } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\n\nimport type {\n ProjectActionRunRequest,\n ProjectActionSetupRequirement,\n} from \"./types.js\";\n\nexport async function validateProjectActionStaticSetup(\n projectRoot: string,\n requirements: readonly ProjectActionSetupRequirement[],\n): Promise<void> {\n for (const requirement of requirements) {\n if (requirement.required === false) continue;\n if (requirement.kind === \"package\") {\n try {\n createRequire(path.join(projectRoot, \"package.json\")).resolve(requirement.name);\n } catch {\n throw new Error(`Project Action package is not installed: ${requirement.name}`);\n }\n }\n if (requirement.kind === \"native_tool\" && !(await executableExists(requirement.name))) {\n throw new Error(`Project Action native tool is not installed: ${requirement.name}`);\n }\n }\n}\n\nexport async function validateProjectActionRunSetup(\n projectRoot: string,\n requirements: readonly ProjectActionSetupRequirement[],\n request: ProjectActionRunRequest,\n): Promise<void> {\n await validateProjectActionStaticSetup(projectRoot, requirements);\n for (const requirement of requirements) {\n if (requirement.required === false) continue;\n if (requirement.kind === \"connection\" && !(requirement.name in (request.connections ?? {}))) {\n throw new Error(`Project Action connection is not configured: ${requirement.name}`);\n }\n if (requirement.kind === \"env\" && !(requirement.name in (request.environment ?? {}))) {\n throw new Error(`Project Action environment value is not configured: ${requirement.name}`);\n }\n }\n}\n\nasync function executableExists(name: string): Promise<boolean> {\n if (!name.trim() || name.includes(\"/\") || name.includes(\"\\\\\")) return false;\n for (const directory of (process.env.PATH ?? \"\").split(path.delimiter).filter(Boolean)) {\n const candidates = process.platform === \"win32\"\n ? (process.env.PATHEXT ?? \".EXE;.CMD;.BAT;.COM\").split(\";\").map((extension) => path.join(directory, `${name}${extension}`))\n : [path.join(directory, name)];\n for (const candidate of candidates) {\n if (await fs.access(candidate).then(() => true).catch(() => false)) return true;\n }\n }\n return false;\n}\n"],
5
- "mappings": "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",
6
- "names": ["fs", "path", "fs", "path", "fs", "path", "path", "fs", "path", "path", "assertWithinProject", "fs"]
7
- }
1
+ {"version":3,"sources":["../../actions/src/local.ts","../../actions/src/build.ts","../../actions/src/schema.ts","../../actions/src/catalog.ts","../../actions/src/discovery.ts","../../actions/src/hash.ts","../../actions/src/setup.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { spawn } from \"node:child_process\";\nimport { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nimport {\n DEFAULT_PROJECT_ACTION_OUTPUT_DIRECTORY,\n buildProjectActions,\n} from \"./build.js\";\nimport {\n loadProjectActionConfiguration,\n resolveProjectActionRuntime,\n} from \"./configuration.js\";\nimport type {\n LocalProjectActionRunner,\n ProjectActionBuildResult,\n ProjectActionRegistry,\n ProjectActionRunRequest,\n ProjectActionRunResult,\n ProjectActionRunnerOptions,\n} from \"./types.js\";\nimport { validateProjectActionRunSetup } from \"./setup.js\";\n\nconst localConcurrency = new Map<string, { active: number; waiting: Array<() => void> }>();\n\nexport function createLocalActionRunner(\n options: ProjectActionRunnerOptions,\n): LocalProjectActionRunner {\n const projectRoot = path.resolve(options.projectRoot);\n const buildPolicy = options.build ?? \"if-missing\";\n let currentBuild: ProjectActionBuildResult | null = null;\n\n const ensureBuild = async (): Promise<ProjectActionBuildResult> => {\n if (buildPolicy === \"always\") return runBuild();\n if (currentBuild) return currentBuild;\n if (buildPolicy === \"never\" || buildPolicy === \"if-missing\") {\n const configuration = await loadProjectActionConfiguration(projectRoot);\n const outputDirectory = path.resolve(\n projectRoot,\n options.outputDirectory ?? configuration.outputDirectory ?? DEFAULT_PROJECT_ACTION_OUTPUT_DIRECTORY,\n );\n const loaded = await loadBuild(projectRoot, outputDirectory);\n if (loaded) return (currentBuild = loaded);\n if (buildPolicy === \"never\") {\n throw new Error(`Project Actions have not been built in ${outputDirectory}.`);\n }\n }\n return runBuild();\n };\n const runBuild = async () => {\n currentBuild = await buildProjectActions({\n projectRoot,\n sourceDirectory: options.sourceDirectory,\n outputDirectory: options.outputDirectory,\n });\n return currentBuild;\n };\n\n return {\n build: runBuild,\n async catalog() {\n return (await ensureBuild()).registry;\n },\n async run<TOutput>(request: ProjectActionRunRequest) {\n const built = await ensureBuild();\n const catalogAction = built.registry.actions.find((action) => action.id === request.actionId);\n if (!catalogAction) throw new Error(`Unknown Project Action: ${request.actionId}`);\n const configuredRuntime = resolveProjectActionRuntime(\n await loadProjectActionConfiguration(projectRoot),\n );\n const resolvedRequest: ProjectActionRunRequest = {\n ...request,\n environment: {\n ...configuredRuntime.environment,\n ...(request.environment ?? {}),\n },\n connections: {\n ...configuredRuntime.connections,\n ...(request.connections ?? {}),\n },\n };\n await validateProjectActionRunSetup(projectRoot, catalogAction.setupRequirements, resolvedRequest);\n const runId = request.runId?.trim() || randomUUID();\n const actionOutputDirectory = path.resolve(\n request.outputDirectory ?? path.join(projectRoot, \".openpond\", \"outputs\", runId),\n );\n assertWithinProject(projectRoot, actionOutputDirectory, \"Project Action output directory\");\n await fs.mkdir(actionOutputDirectory, { recursive: true });\n const release = await acquireLocalActionSlot(\n `${projectRoot}\\0${request.actionId}`,\n catalogAction.implementation.concurrency,\n resolvedRequest.signal,\n );\n const responseFile = path.join(built.outputDirectory, `.run-${randomUUID()}.json`);\n const startedAt = Date.now();\n let childResult: Awaited<ReturnType<typeof executeChild>>;\n let payload: {\n ok: true;\n output: TOutput;\n traces: ProjectActionRunResult[\"traces\"];\n outputs: ProjectActionRunResult[\"outputs\"];\n };\n try {\n childResult = await executeChild({\n runnerPath: built.runnerPath,\n cwd: projectRoot,\n signal: resolvedRequest.signal,\n request: {\n actionId: request.actionId,\n input: resolvedRequest.input ?? {},\n runId,\n idempotencyKey: resolvedRequest.idempotencyKey ?? null,\n timeoutMs: resolvedRequest.timeoutMs,\n projectRoot,\n outputDirectory: actionOutputDirectory,\n responseFile,\n environment: resolvedRequest.environment ?? {},\n connections: resolvedRequest.connections ?? {},\n },\n });\n payload = JSON.parse(await fs.readFile(responseFile, \"utf8\")) as typeof payload;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(redactRuntimeValues(message, resolvedRequest));\n } finally {\n await fs.rm(responseFile, { force: true }).catch(() => undefined);\n release();\n }\n return {\n runId,\n actionId: request.actionId,\n status: \"succeeded\",\n output: payload.output,\n stdout: redactRuntimeValues(childResult.stdout, resolvedRequest),\n stderr: redactRuntimeValues(childResult.stderr, resolvedRequest),\n traces: redactRuntimeValue(payload.traces, resolvedRequest),\n outputs: redactRuntimeValue(payload.outputs, resolvedRequest),\n outputDirectory: actionOutputDirectory,\n durationMs: Date.now() - startedAt,\n } satisfies ProjectActionRunResult<TOutput>;\n },\n };\n}\n\nasync function acquireLocalActionSlot(\n key: string,\n limit: number | null,\n signal?: AbortSignal,\n): Promise<() => void> {\n if (limit === null) return () => undefined;\n const state = localConcurrency.get(key) ?? { active: 0, waiting: [] };\n localConcurrency.set(key, state);\n if (state.active >= limit) {\n await new Promise<void>((resolve, reject) => {\n const resume = () => {\n signal?.removeEventListener(\"abort\", abort);\n resolve();\n };\n const abort = () => {\n const index = state.waiting.indexOf(resume);\n if (index >= 0) state.waiting.splice(index, 1);\n reject(signal?.reason instanceof Error ? signal.reason : new Error(\"Project Action was cancelled.\"));\n };\n if (signal?.aborted) {\n abort();\n return;\n }\n state.waiting.push(resume);\n signal?.addEventListener(\"abort\", abort, { once: true });\n });\n } else {\n state.active += 1;\n }\n let released = false;\n return () => {\n if (released) return;\n released = true;\n const next = state.waiting.shift();\n if (next) {\n next();\n return;\n }\n state.active -= 1;\n if (state.active === 0 && state.waiting.length === 0) localConcurrency.delete(key);\n };\n}\n\nasync function loadBuild(\n projectRoot: string,\n outputDirectory: string,\n): Promise<ProjectActionBuildResult | null> {\n const manifestPath = path.join(outputDirectory, \"build-manifest.json\");\n const registryPath = path.join(outputDirectory, \"action-registry.json\");\n const [manifestText, registryText] = await Promise.all([\n fs.readFile(manifestPath, \"utf8\").catch(() => null),\n fs.readFile(registryPath, \"utf8\").catch(() => null),\n ]);\n if (!manifestText || !registryText) return null;\n const manifest = JSON.parse(manifestText) as ProjectActionBuildResult[\"manifest\"];\n const registry = JSON.parse(registryText) as ProjectActionRegistry;\n return {\n projectRoot,\n outputDirectory,\n bundlePath: path.join(outputDirectory, manifest.bundleFile),\n runnerPath: path.join(outputDirectory, manifest.runnerFile),\n registryPath,\n manifestPath,\n registry,\n manifest,\n };\n}\n\nfunction redactRuntimeValues(value: string, request: ProjectActionRunRequest): string {\n let redacted = value;\n for (const secret of runtimeStringValues(request)) {\n if (secret.length >= 4) redacted = redacted.split(secret).join(\"[REDACTED]\");\n }\n return redacted;\n}\n\nfunction redactRuntimeValue<T>(value: T, request: ProjectActionRunRequest): T {\n const serialized = JSON.stringify(value);\n return JSON.parse(redactRuntimeValues(serialized, request)) as T;\n}\n\nfunction runtimeStringValues(request: ProjectActionRunRequest): string[] {\n const values = new Set<string>(Object.values(request.environment ?? {}));\n const visit = (value: unknown) => {\n if (typeof value === \"string\") values.add(value);\n else if (Array.isArray(value)) value.forEach(visit);\n else if (value && typeof value === \"object\") Object.values(value).forEach(visit);\n };\n visit(request.connections ?? {});\n return [...values].filter(Boolean).sort((left, right) => right.length - left.length);\n}\n\nfunction executeChild(input: {\n runnerPath: string;\n cwd: string;\n signal?: AbortSignal;\n request: Record<string, unknown>;\n}): Promise<{ stdout: string; stderr: string }> {\n return new Promise((resolve, reject) => {\n if (input.signal?.aborted) {\n reject(input.signal.reason instanceof Error ? input.signal.reason : new Error(\"Project Action was cancelled.\"));\n return;\n }\n let requestJson: string;\n try {\n requestJson = JSON.stringify(input.request);\n } catch (error) {\n reject(new Error(`Project Action request is not serializable: ${error instanceof Error ? error.message : String(error)}`));\n return;\n }\n const child = spawn(process.execPath, [input.runnerPath], {\n cwd: input.cwd,\n env: minimalEnvironment(),\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n let stdout = \"\";\n let stderr = \"\";\n child.stdout.setEncoding(\"utf8\");\n child.stderr.setEncoding(\"utf8\");\n child.stdout.on(\"data\", (chunk: string) => { stdout += chunk; });\n child.stderr.on(\"data\", (chunk: string) => { stderr += chunk; });\n const abort = () => child.kill(\"SIGTERM\");\n input.signal?.addEventListener(\"abort\", abort, { once: true });\n child.once(\"error\", reject);\n child.once(\"close\", (code, signal) => {\n input.signal?.removeEventListener(\"abort\", abort);\n if (input.signal?.aborted) {\n reject(input.signal.reason instanceof Error ? input.signal.reason : new Error(\"Project Action was cancelled.\"));\n return;\n }\n if (code !== 0) {\n reject(new Error(`Project Action process failed (${code ?? signal ?? \"unknown\"}): ${stderr.trim() || stdout.trim()}`));\n return;\n }\n resolve({ stdout, stderr });\n });\n child.stdin.end(requestJson);\n });\n}\n\nfunction assertWithinProject(projectRoot: string, target: string, label: string): void {\n const relative = path.relative(projectRoot, target);\n if (relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n throw new Error(`${label} must stay inside the Project root.`);\n }\n}\n\nfunction minimalEnvironment(): NodeJS.ProcessEnv {\n const env: NodeJS.ProcessEnv = {};\n for (const name of [\"PATH\", \"SystemRoot\", \"WINDIR\", \"TMPDIR\", \"TEMP\", \"TMP\"]) {\n if (process.env[name] !== undefined) env[name] = process.env[name];\n }\n return env;\n}\n\nexport { buildProjectActions } from \"./build.js\";\nexport {\n loadProjectActionConfiguration,\n PROJECT_ACTION_CONFIG_PATH,\n resolveProjectActionRuntime,\n} from \"./configuration.js\";\nexport type {\n LocalProjectActionRunner,\n ProjectActionBuildManifest,\n ProjectActionBuildResult,\n ProjectActionCatalogEntry,\n ProjectActionRegistry,\n ProjectActionRunRequest,\n ProjectActionRunResult,\n ProjectActionRunnerOptions,\n} from \"./types.js\";\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\n\nimport { build } from \"esbuild\";\n\nimport { collectProjectActions, createProjectActionRegistry } from \"./catalog.js\";\nimport { loadProjectActionConfiguration } from \"./configuration.js\";\nimport { discoverProjectActionFiles } from \"./discovery.js\";\nimport { canonicalJson, sha256 } from \"./hash.js\";\nimport { validateProjectActionStaticSetup } from \"./setup.js\";\nimport type {\n ProjectActionBuildManifest,\n ProjectActionBuildResult,\n ProjectActionDefinition,\n} from \"./types.js\";\n\nexport const DEFAULT_PROJECT_ACTION_OUTPUT_DIRECTORY = \".openpond/actions\";\n\nexport async function buildProjectActions(input: {\n projectRoot: string;\n sourceDirectory?: string;\n outputDirectory?: string;\n}): Promise<ProjectActionBuildResult> {\n const configuration = await loadProjectActionConfiguration(input.projectRoot);\n const discovered = await discoverProjectActionFiles({\n projectRoot: input.projectRoot,\n sourceDirectory: input.sourceDirectory ?? configuration.sourceDirectory,\n });\n const outputDirectory = path.resolve(\n discovered.projectRoot,\n input.outputDirectory ?? configuration.outputDirectory ?? DEFAULT_PROJECT_ACTION_OUTPUT_DIRECTORY,\n );\n assertWithinProject(discovered.projectRoot, outputDirectory);\n await fs.mkdir(outputDirectory, { recursive: true });\n\n const entryPath = path.join(outputDirectory, \"entry.mjs\");\n const bundlePath = path.join(outputDirectory, \"bundle.mjs\");\n const runnerPath = path.join(outputDirectory, \"runner.mjs\");\n const registryPath = path.join(outputDirectory, \"action-registry.json\");\n const manifestPath = path.join(outputDirectory, \"build-manifest.json\");\n const imports = discovered.files.map((file, index) => {\n const relative = path.relative(outputDirectory, path.join(discovered.projectRoot, file)).split(path.sep).join(\"/\");\n const specifier = relative.startsWith(\".\") ? relative : `./${relative}`;\n return `import * as actionModule${index} from ${JSON.stringify(specifier)};`;\n });\n const modules = discovered.files.map((_file, index) => `actionModule${index}`).join(\", \");\n await fs.writeFile(\n entryPath,\n [\n ...imports,\n `export const projectActionModules = [${modules}];`,\n \"export default projectActionModules;\",\n \"\",\n ].join(\"\\n\"),\n \"utf8\",\n );\n await build({\n entryPoints: [entryPath],\n outfile: bundlePath,\n bundle: true,\n platform: \"node\",\n format: \"esm\",\n target: \"node22.14\",\n sourcemap: false,\n legalComments: \"none\",\n logLevel: \"silent\",\n nodePaths: dependencySearchPaths(discovered.projectRoot),\n });\n const cacheKey = `openpond_action_build=${Date.now()}_${Math.random().toString(16).slice(2)}`;\n const loaded = await import(`${pathToFileURL(bundlePath).href}?${cacheKey}`) as {\n projectActionModules?: unknown[];\n default?: unknown[];\n };\n const actions = collectProjectActions(loaded.projectActionModules ?? loaded.default ?? []);\n for (const action of actions) {\n await validateProjectActionStaticSetup(discovered.projectRoot, action.setup);\n }\n const registry = createProjectActionRegistry(actions);\n await fs.writeFile(registryPath, canonicalJson(registry), \"utf8\");\n await fs.writeFile(runnerPath, runtimeSource(), { encoding: \"utf8\", mode: 0o755 });\n\n const bundleHash = sha256(await fs.readFile(bundlePath));\n const registryHash = sha256(canonicalJson(registry));\n const manifest: ProjectActionBuildManifest = {\n schemaVersion: \"openpond.projectActionBuild.v1\",\n sourceDirectory: path.relative(discovered.projectRoot, discovered.sourceRoot).split(path.sep).join(\"/\"),\n sourceFiles: discovered.files,\n bundleFile: path.basename(bundlePath),\n runnerFile: path.basename(runnerPath),\n registryFile: path.basename(registryPath),\n bundleHash,\n registryHash,\n };\n await fs.writeFile(manifestPath, canonicalJson(manifest), \"utf8\");\n await fs.rm(entryPath, { force: true });\n return {\n projectRoot: discovered.projectRoot,\n outputDirectory,\n bundlePath,\n runnerPath,\n registryPath,\n manifestPath,\n registry,\n manifest,\n };\n}\n\nfunction dependencySearchPaths(projectRoot: string): string[] {\n const candidates: string[] = [];\n let current = projectRoot;\n while (true) {\n candidates.push(path.join(current, \"node_modules\"));\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n candidates.push(path.resolve(path.dirname(fileURLToPath(import.meta.url)), \"../../../node_modules\"));\n return [...new Set(candidates)];\n}\n\nexport async function loadBuiltProjectActions(\n bundlePath: string,\n): Promise<ProjectActionDefinition[]> {\n const stats = await fs.stat(bundlePath).catch(() => null);\n if (!stats?.isFile()) throw new Error(`Project Action bundle does not exist: ${bundlePath}`);\n const loaded = await import(`${pathToFileURL(bundlePath).href}?openpond_action_load=${Date.now()}`) as {\n projectActionModules?: unknown[];\n default?: unknown[];\n };\n return collectProjectActions(loaded.projectActionModules ?? loaded.default ?? []);\n}\n\nfunction assertWithinProject(projectRoot: string, target: string): void {\n const relative = path.relative(projectRoot, target);\n if (relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n throw new Error(\"Project Action output directory must stay inside the Project root.\");\n }\n}\n\nfunction runtimeSource(): string {\n return `#!/usr/bin/env node\nimport { promises as fs } from \"node:fs\";\nimport { stdin } from \"node:process\";\nimport path from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\n\nlet requestText = \"\";\nstdin.setEncoding(\"utf8\");\nfor await (const chunk of stdin) requestText += chunk;\nconst request = JSON.parse(requestText);\nconst bundlePath = path.resolve(path.dirname(fileURLToPath(import.meta.url)), \"bundle.mjs\");\nconst loaded = await import(pathToFileURL(bundlePath).href);\nconst values = [];\nconst seen = new Set();\nconst visit = (value) => {\n if (seen.has(value)) return;\n if (value && (typeof value === \"object\" || typeof value === \"function\")) seen.add(value);\n if (value?.kind === \"openpond-project-action\" && typeof value.run === \"function\") { values.push(value); return; }\n if (Array.isArray(value)) { value.forEach(visit); return; }\n if (value && typeof value === \"object\") Object.values(value).forEach(visit);\n};\n(loaded.projectActionModules ?? loaded.default ?? []).forEach(visit);\nconst action = values.find((candidate) => candidate.id === request.actionId);\nif (!action) throw new Error(\\`Unknown Project Action: \\${request.actionId}\\`);\nconst controller = new AbortController();\nconst timeoutMs = Math.min(request.timeoutMs ?? action.timeoutMs, action.timeoutMs);\nconst timer = setTimeout(() => controller.abort(new Error(\\`Project Action timed out after \\${timeoutMs}ms.\\`)), timeoutMs);\nconst traces = [];\nconst outputs = [];\nconst env = request.environment ?? {};\nconst connections = request.connections ?? {};\nconst context = {\n runId: request.runId,\n actionId: action.id,\n idempotencyKey: request.idempotencyKey ?? null,\n projectRoot: request.projectRoot,\n outputDirectory: request.outputDirectory,\n signal: controller.signal,\n env(name) { return Object.prototype.hasOwnProperty.call(env, name) ? env[name] : undefined; },\n connection(name) {\n if (!Object.prototype.hasOwnProperty.call(connections, name)) throw new Error(\\`Project Action connection is not configured: \\${name}\\`);\n return connections[name];\n },\n trace(name, payload) { traces.push({ name, ...(payload ? { payload } : {}), timestamp: new Date().toISOString() }); },\n output(value) {\n if (!value || typeof value.path !== \"string\" || !value.path.trim()) throw new Error(\"Project Action output requires a path.\");\n const outputPath = path.resolve(request.outputDirectory, value.path);\n const relative = path.relative(request.outputDirectory, outputPath);\n if (relative.startsWith(\"..\") || path.isAbsolute(relative)) throw new Error(\"Project Action output must stay inside the run output directory.\");\n outputs.push({ ...value, path: relative.split(path.sep).join(\"/\") });\n },\n};\ntry {\n const input = action.inputSchema.parse(request.input ?? {});\n const result = await Promise.race([\n Promise.resolve(action.run(context, input)),\n new Promise((_, reject) => controller.signal.addEventListener(\"abort\", () => reject(controller.signal.reason), { once: true })),\n ]);\n const output = action.outputSchema.parse(result);\n for (const artifact of outputs) {\n const stats = await fs.stat(path.resolve(request.outputDirectory, artifact.path)).catch(() => null);\n if (!stats?.isFile()) throw new Error(\\`Project Action output does not exist: \\${artifact.path}\\`);\n }\n await fs.writeFile(request.responseFile, JSON.stringify({ ok: true, output, traces, outputs }), \"utf8\");\n} finally {\n clearTimeout(timer);\n}\n`;\n}\n","import { z } from \"zod\";\n\nimport type { ProjectActionSchema } from \"./types.js\";\n\nexport function projectActionJsonSchema(schema: ProjectActionSchema): Record<string, unknown> {\n return z.toJSONSchema(schema, { unrepresentable: \"any\" }) as Record<string, unknown>;\n}\n\nexport function parseProjectActionValue(schema: ProjectActionSchema, value: unknown): unknown {\n return schema.parse(value);\n}\n","import { isProjectActionDefinition } from \"./define-action.js\";\nimport { projectActionJsonSchema } from \"./schema.js\";\nimport type {\n ProjectActionCatalogEntry,\n ProjectActionDefinition,\n ProjectActionRegistry,\n} from \"./types.js\";\n\nexport function collectProjectActions(modules: unknown[]): ProjectActionDefinition[] {\n const actions: ProjectActionDefinition[] = [];\n const seenObjects = new Set<unknown>();\n const visit = (value: unknown) => {\n if (seenObjects.has(value)) return;\n if (value && (typeof value === \"object\" || typeof value === \"function\")) seenObjects.add(value);\n if (isProjectActionDefinition(value)) {\n actions.push(value);\n return;\n }\n if (Array.isArray(value)) {\n value.forEach(visit);\n return;\n }\n if (value && typeof value === \"object\") Object.values(value).forEach(visit);\n };\n modules.forEach(visit);\n const byId = new Map<string, ProjectActionDefinition>();\n for (const action of actions) {\n if (byId.has(action.id)) throw new Error(`Duplicate Project Action id: ${action.id}`);\n byId.set(action.id, action);\n }\n return [...byId.values()].sort((left, right) => left.id.localeCompare(right.id));\n}\n\nexport function createProjectActionRegistry(\n actions: readonly ProjectActionDefinition[],\n): ProjectActionRegistry {\n return {\n schemaVersion: \"openpond.projectActionRegistry.v1\",\n actions: actions.map(toCatalogEntry),\n };\n}\n\nfunction toCatalogEntry(action: ProjectActionDefinition): ProjectActionCatalogEntry {\n return {\n id: action.id,\n sourceActionId: action.id,\n name: action.id,\n label: action.label,\n description: action.description,\n visibility: \"default\",\n inputSchema: projectActionJsonSchema(action.inputSchema),\n outputSchema: projectActionJsonSchema(action.outputSchema),\n approvalPolicy: {\n ...action.approval,\n required: action.approval.mode === \"always\" || action.approval.mode === \"sensitive\" ||\n (action.approval.mode === \"writes\" && action.behavior === \"write\"),\n risk: action.behavior,\n },\n artifactPolicy: {\n outputArtifacts: [],\n persistRunSummary: true,\n persistTrace: true,\n },\n setupRequirements: [...action.setup],\n mcp: { enabled: false },\n schedulePolicy: { enabled: false, allowAdHoc: true },\n trace: { name: action.id, namespace: \"project-actions\" },\n implementation: {\n type: \"openpond-project-action\",\n actionId: action.id,\n behavior: action.behavior,\n timeoutMs: action.timeoutMs,\n concurrency: action.concurrency,\n },\n invokesModel: action.invokesModel,\n };\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nconst ACTION_FILE = /\\.(?:[cm]?[jt]s)$/i;\nconst IGNORED_FILE = /(?:\\.d\\.ts|\\.test\\.[cm]?[jt]s|\\.spec\\.[cm]?[jt]s)$/i;\n\nexport async function discoverProjectActionFiles(input: {\n projectRoot: string;\n sourceDirectory?: string;\n}): Promise<{ projectRoot: string; sourceRoot: string; files: string[] }> {\n const projectRoot = path.resolve(input.projectRoot);\n const sourceRoot = path.resolve(projectRoot, input.sourceDirectory ?? \"openpond/actions\");\n if (!isWithin(projectRoot, sourceRoot)) {\n throw new Error(\"Project Action source directory must stay inside the Project root.\");\n }\n const stats = await fs.stat(sourceRoot).catch(() => null);\n if (!stats?.isDirectory()) {\n throw new Error(`Project Action source directory does not exist: ${sourceRoot}`);\n }\n const files = await walk(sourceRoot);\n const actions = files\n .filter((file) => ACTION_FILE.test(file) && !IGNORED_FILE.test(file))\n .map((file) => path.relative(projectRoot, file).split(path.sep).join(\"/\"))\n .sort();\n if (actions.length === 0) {\n throw new Error(`No Project Action files were found under ${sourceRoot}.`);\n }\n return { projectRoot, sourceRoot, files: actions };\n}\n\nasync function walk(directory: string): Promise<string[]> {\n const entries = await fs.readdir(directory, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries.sort((left, right) => left.name.localeCompare(right.name))) {\n if (entry.name.startsWith(\".\") || entry.name === \"node_modules\") continue;\n const target = path.join(directory, entry.name);\n if (entry.isDirectory()) files.push(...(await walk(target)));\n else if (entry.isFile()) files.push(target);\n }\n return files;\n}\n\nfunction isWithin(root: string, target: string): boolean {\n const relative = path.relative(root, target);\n return relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative));\n}\n","import { createHash } from \"node:crypto\";\n\nexport function sha256(value: string | Uint8Array): string {\n return createHash(\"sha256\").update(value).digest(\"hex\");\n}\n\nexport function canonicalJson(value: unknown): string {\n return `${JSON.stringify(sortValue(value), null, 2)}\\n`;\n}\n\nfunction sortValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(sortValue);\n if (!value || typeof value !== \"object\") return value;\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, child]) => [key, sortValue(child)]),\n );\n}\n","import { promises as fs } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\n\nimport type {\n ProjectActionRunRequest,\n ProjectActionSetupRequirement,\n} from \"./types.js\";\n\nexport async function validateProjectActionStaticSetup(\n projectRoot: string,\n requirements: readonly ProjectActionSetupRequirement[],\n): Promise<void> {\n for (const requirement of requirements) {\n if (requirement.required === false) continue;\n if (requirement.kind === \"package\") {\n try {\n createRequire(path.join(projectRoot, \"package.json\")).resolve(requirement.name);\n } catch {\n throw new Error(`Project Action package is not installed: ${requirement.name}`);\n }\n }\n if (requirement.kind === \"native_tool\" && !(await executableExists(requirement.name))) {\n throw new Error(`Project Action native tool is not installed: ${requirement.name}`);\n }\n }\n}\n\nexport async function validateProjectActionRunSetup(\n projectRoot: string,\n requirements: readonly ProjectActionSetupRequirement[],\n request: ProjectActionRunRequest,\n): Promise<void> {\n await validateProjectActionStaticSetup(projectRoot, requirements);\n for (const requirement of requirements) {\n if (requirement.required === false) continue;\n if (requirement.kind === \"connection\" && !(requirement.name in (request.connections ?? {}))) {\n throw new Error(`Project Action connection is not configured: ${requirement.name}`);\n }\n if (requirement.kind === \"env\" && !(requirement.name in (request.environment ?? {}))) {\n throw new Error(`Project Action environment value is not configured: ${requirement.name}`);\n }\n }\n}\n\nasync function executableExists(name: string): Promise<boolean> {\n if (!name.trim() || name.includes(\"/\") || name.includes(\"\\\\\")) return false;\n for (const directory of (process.env.PATH ?? \"\").split(path.delimiter).filter(Boolean)) {\n const candidates = process.platform === \"win32\"\n ? (process.env.PATHEXT ?? \".EXE;.CMD;.BAT;.COM\").split(\";\").map((extension) => path.join(directory, `${name}${extension}`))\n : [path.join(directory, name)];\n for (const candidate of candidates) {\n if (await fs.access(candidate).then(() => true).catch(() => false)) return true;\n }\n }\n return false;\n}\n"],"mappings":"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","names":["fs","path","fs","path","fs","path","path","fs","path","path","assertWithinProject","fs"]}
package/dist/actions.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import {
2
2
  defineAction,
3
3
  isProjectActionDefinition
4
- } from "./chunk-P27DQ65Z.js";
4
+ } from "./chunk-OVGDDKO2.js";
5
+ import "./chunk-YLJ4XMA6.js";
5
6
  export {
6
7
  defineAction,
7
8
  isProjectActionDefinition
@@ -1,7 +1 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sourcesContent": [],
5
- "mappings": "",
6
- "names": []
7
- }
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -12,18 +12,19 @@ import {
12
12
  sealAdvancedRefinerEvaluationPin,
13
13
  sealAdvancedRefinerReviewReceipt,
14
14
  verifyAdvancedRefinerEvaluationPin
15
- } from "./chunk-YUKV7RCD.js";
16
- import "./chunk-TSMGMA6R.js";
17
- import "./chunk-YCQVVFE5.js";
18
- import "./chunk-KAE7AMYE.js";
19
- import "./chunk-CTVKI3BV.js";
20
- import "./chunk-T4APHDES.js";
21
- import "./chunk-QTJQIHDZ.js";
22
- import "./chunk-ZJ3H3VS7.js";
23
- import "./chunk-CK3ONRRC.js";
24
- import "./chunk-TCHAWJMB.js";
25
- import "./chunk-3KXDH6OB.js";
26
- import "./chunk-COPVBJPL.js";
15
+ } from "./chunk-GWGDWZVN.js";
16
+ import "./chunk-KKL6OICH.js";
17
+ import "./chunk-3B5KSH3V.js";
18
+ import "./chunk-H3367ISL.js";
19
+ import "./chunk-DBKCSQVH.js";
20
+ import "./chunk-O6FKHAWN.js";
21
+ import "./chunk-MJELLVQP.js";
22
+ import "./chunk-6GQ3GIAP.js";
23
+ import "./chunk-O54KGALH.js";
24
+ import "./chunk-CAMLCKSF.js";
25
+ import "./chunk-CL3IOOVL.js";
26
+ import "./chunk-H3JZ3P5T.js";
27
+ import "./chunk-YLJ4XMA6.js";
27
28
  export {
28
29
  AdvancedRefinerEvaluationAccountingSchema,
29
30
  AdvancedRefinerEvaluationCommandSchema,
@@ -1,7 +1 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sourcesContent": [],
5
- "mappings": "",
6
- "names": []
7
- }
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -5,14 +5,15 @@ import {
5
5
  CandidateEvaluationPreparationSchema,
6
6
  CandidateEvaluationRequestSchema,
7
7
  createCandidateEvaluationClient
8
- } from "./chunk-BSK3VLM3.js";
9
- import "./chunk-G53MA5XX.js";
10
- import "./chunk-QTJQIHDZ.js";
11
- import "./chunk-ZJ3H3VS7.js";
12
- import "./chunk-CK3ONRRC.js";
13
- import "./chunk-TCHAWJMB.js";
14
- import "./chunk-3KXDH6OB.js";
15
- import "./chunk-COPVBJPL.js";
8
+ } from "./chunk-6MFFKAU6.js";
9
+ import "./chunk-T3MFWGMX.js";
10
+ import "./chunk-MJELLVQP.js";
11
+ import "./chunk-6GQ3GIAP.js";
12
+ import "./chunk-O54KGALH.js";
13
+ import "./chunk-CAMLCKSF.js";
14
+ import "./chunk-CL3IOOVL.js";
15
+ import "./chunk-H3JZ3P5T.js";
16
+ import "./chunk-YLJ4XMA6.js";
16
17
  export {
17
18
  CandidateEvaluationControlSchema,
18
19
  CandidateEvaluationOptionSchema,
@@ -1,7 +1 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sourcesContent": [],
5
- "mappings": "",
6
- "names": []
7
- }
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -6,19 +6,19 @@ import {
6
6
  ExperimentImprovementTestRecipeSchema,
7
7
  verifyExperimentImprovementHumanOptions,
8
8
  verifyExperimentImprovementState
9
- } from "./chunk-TSMGMA6R.js";
9
+ } from "./chunk-KKL6OICH.js";
10
10
  import {
11
11
  HarnessPolicySourcePackageSchema,
12
12
  validateHarnessPolicySourcePackage
13
- } from "./chunk-DUKW3R7O.js";
13
+ } from "./chunk-Q4TKI2MV.js";
14
14
  import {
15
15
  fetchConnectedJson
16
- } from "./chunk-T4APHDES.js";
16
+ } from "./chunk-O6FKHAWN.js";
17
17
  import {
18
18
  ImmutableReleaseRefSchema,
19
19
  contentHash,
20
20
  sha256
21
- } from "./chunk-COPVBJPL.js";
21
+ } from "./chunk-H3JZ3P5T.js";
22
22
 
23
23
  // src/experiment-improvement-client.ts
24
24
  import { z as z2 } from "zod";
@@ -157,4 +157,4 @@ export {
157
157
  HostedProfileCandidateCommandSchema,
158
158
  ExperimentImprovementClient
159
159
  };
160
- //# sourceMappingURL=chunk-77N3QEIL.js.map
160
+ //# sourceMappingURL=chunk-25L5IXHA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/experiment-improvement-client.ts","../src/experiment-improvement-hosted-adoption.ts"],"sourcesContent":["import {z} from \"zod\";\nimport {contentHash,sha256} from \"@openpond/harness\";\nimport {verifyExperimentImprovementHumanOptions,ExperimentImprovementListSchema,ExperimentImprovementOptionsSchema,ExperimentImprovementCommandSchema,verifyExperimentImprovementState,type ExperimentImprovementCommand} from \"./experiment-improvement-contracts.js\";\nimport {HostedProfileCandidateCommandSchema,verifyHostedProfileCandidateReceipt} from \"./experiment-improvement-hosted-adoption.js\";\nimport {fetchConnectedJson} from \"./connected-evidence-http.js\";\nexport class ExperimentImprovementClient {\n private readonly origin:string;\n constructor(private readonly options:{baseUrl:string;apiKey:string;teamId:string;actorId:string;fetch?:typeof fetch}){const url=new URL(options.baseUrl);if(![\"http:\",\"https:\"].includes(url.protocol)||url.username||url.password||url.hash||url.search||!options.apiKey.trim()||!options.teamId.trim()||!options.actorId.trim())throw new Error(\"Select the authenticated Improve owner and API origin.\");this.origin=url.toString().replace(/\\/+$/,\"\");}\n async hostedCandidate(raw:import(\"zod\").input<typeof HostedProfileCandidateCommandSchema>,signal?:AbortSignal){const request=HostedProfileCandidateCommandSchema.parse(raw);if(request.operation===\"adopt\"&&(request.export.actorId!==this.options.actorId||request.export.teamId!==this.options.teamId))throw new Error(\"The hosted candidate export belongs to a different owner.\");const {response,value}=await fetchConnectedJson(this.options.fetch??fetch,`${this.origin}/v1/profile-candidate-adoptions`,{method:\"POST\",redirect:\"error\",headers:{Authorization:`Bearer ${this.options.apiKey}`,\"Content-Type\":\"application/json\",\"X-OpenPond-Team-Id\":this.options.teamId},body:JSON.stringify({teamId:this.options.teamId,command:request}),signal},(status,code,message)=>Object.assign(new Error(message),{status,code}));if(!response.ok){const error=z.object({code:z.string(),message:z.string().optional(),error:z.string().optional()}).passthrough().safeParse(value);throw Object.assign(new Error(error.success?error.data.message??error.data.error??error.data.code:\"Hosted candidate operation failed.\"),{status:response.status,code:error.success?error.data.code:undefined});}const receipt=verifyHostedProfileCandidateReceipt(value);if(receipt.actorId!==this.options.actorId||receipt.teamId!==this.options.teamId||receipt.operationId!==request.operationId||request.operation===\"adopt\"&&(receipt.exportHash!==request.export.contentHash||receipt.candidateId!==request.export.candidateId||receipt.testedCandidateRelease.contentHash!==request.export.policySource.harnessRelease.contentHash))throw new Error(\"Hosted candidate readback differs from the exact owner request.\");return receipt;}\n async command(raw:ExperimentImprovementCommand,signal?:AbortSignal){const request=ExperimentImprovementCommandSchema.parse(raw),{response,value}=await fetchConnectedJson(this.options.fetch??fetch,`${this.origin}/v1/experiment-improvements`,{method:\"POST\",redirect:\"error\",headers:{Authorization:`Bearer ${this.options.apiKey}`,\"Content-Type\":\"application/json\",\"X-OpenPond-Team-Id\":this.options.teamId},body:JSON.stringify({teamId:this.options.teamId,request}),signal},(status,code,message)=>Object.assign(new Error(message),{status,code}));\n if(!response.ok){const error=z.object({error:z.string(),code:z.string().optional()}).passthrough().safeParse(value);throw Object.assign(new Error(error.success?error.data.error:\"The Improve operation failed.\"),{status:response.status,code:error.success?error.data.code:undefined});}\n if(request.operation===\"options\"){const result=ExperimentImprovementOptionsSchema.parse(value);if(result.teamId!==this.options.teamId||contentHash(result.evidence)!==contentHash(request.evidence))throw new Error(\"The Improve choices changed their exact originating evidence.\");return result;}\n if(request.operation===\"humanComparisonOptions\"){const result=verifyExperimentImprovementHumanOptions(value);if(result.candidateId!==request.id||result.actorId!==this.options.actorId||result.teamId!==this.options.teamId)throw new Error(\"Human discovery belongs to another owner or candidate.\");return result;}\n if(request.operation===\"instructions\"){const result=z.object({candidateId:z.string(),candidateRevision:z.number().int().positive(),path:z.string(),text:z.string().max(250000),textHash:z.string().regex(/^[a-f0-9]{64}$/),contentHash:z.string().regex(/^[a-f0-9]{64}$/)}).strict().parse(value);if(result.candidateId!==request.id||sha256(result.text)!==result.textHash)throw new Error(\"The candidate instructions belong to a different revision.\");return result;}\n const page=request.operation===\"list\"?ExperimentImprovementListSchema.parse(value):null;if(request.operation===\"list\"&&page&&(page.states.length>request.limit||page.states.some((state,index)=>request.cursor&&state.id<=request.cursor||index>0&&state.id<=page.states[index-1]!.id)||page.nextCursor&&(request.cursor&&page.nextCursor<=request.cursor||page.states.some(state=>state.id>page.nextCursor!))))throw new Error(\"The retained candidate page changed its scan boundary.\");\n const states=page? page.states:[value];const parsed=states.map(item=>{const state=verifyExperimentImprovementState(item);if(state.actorId!==this.options.actorId||state.teamId!==this.options.teamId||\"id\" in request&&state.id!==request.id)throw new Error(\"The Improve response belongs to a different owner or candidate.\");if(request.operation===\"start\"&&state.requestHash!==contentHash(request.request))throw new Error(\"The Improve request identity changed.\");return state;});return page?{states:parsed,nextCursor:page.nextCursor}:parsed[0]!;\n }\n}\n","import {z} from \"zod\";\nimport {contentHash,ImmutableReleaseRefSchema,HarnessPolicySourcePackageSchema,validateHarnessPolicySourcePackage} from \"@openpond/harness\";\nimport {ExperimentImprovementTestRecipeSchema,ExperimentImprovementStateSchema} from \"./experiment-improvement-contracts.js\";\nconst Id=z.string().min(1).max(240),Hash=z.string().regex(/^[a-f0-9]{64}$/),Commit=z.string().regex(/^[a-f0-9]{40}$/);\n/** This export attests native owner execution. It never asserts a hosted run,\n * grants training eligibility, or authorizes automatic candidate adoption. */\nexport const HostedProfileCandidateExportSchema=z.object({schemaVersion:z.literal(\"openpond.hostedProfileCandidateExport.v1\"),\n actorId:Id,teamId:Id,candidateId:Id,candidateRevision:z.number().int().positive(),projectId:Id.nullable(),\n profileRef:z.object({source:z.literal(\"openpond_git\"),repositoryId:Id,profileId:Id}).strict(),expectedCommit:Commit,\n component:ExperimentImprovementStateSchema.shape.component,baseRelease:ImmutableReleaseRefSchema,\n frozenHash:Hash,executableSourceHash:Hash,protectedClosureHash:Hash,\n compiler:z.object({workspaceId:Id,name:z.string().max(500),repositoryId:Id}).strict(),\n sourceManifest:z.object({base64:z.string().max(2_800_000),contentHash:Hash,sizeBytes:z.number().int().positive().max(2_000_000)}).strict(),\n policySource:HarnessPolicySourcePackageSchema,\n qualification:z.object({kind:z.enum([\"owner_attested_local\",\"hosted_execution\"]),ownerActorId:Id,teamId:Id,originalEvidence:ImmutableReleaseRefSchema,\n baseline:ImmutableReleaseRefSchema,candidate:ImmutableReleaseRefSchema,comparisonHash:Hash,recipe:ExperimentImprovementTestRecipeSchema}).strict(),\n createdAt:z.string().datetime(),contentHash:Hash}).strict();\nexport type HostedProfileCandidateExport=z.infer<typeof HostedProfileCandidateExportSchema>;\nexport function verifyHostedProfileCandidateExport(raw:unknown){const value=HostedProfileCandidateExportSchema.parse(raw),{contentHash:hash,...body}=value;\n if(contentHash(body)!==hash||value.qualification.ownerActorId!==value.actorId||value.qualification.teamId!==value.teamId||value.qualification.recipe.externalDatasetBinding.profileId!==value.profileRef.profileId||value.qualification.recipe.externalDatasetBinding.protectedProfileClosureHash!==value.protectedClosureHash)throw new Error(\"Hosted candidate owner attestation identity differs.\");\n validateHarnessPolicySourcePackage(value.policySource);return value;\n}\nexport const HostedProfileCandidateReceiptSchema=z.object({schemaVersion:z.literal(\"openpond.hostedProfileCandidateAdoption.v1\"),id:Id,operationId:Id,actorId:Id,teamId:Id,\n candidateId:Id,exportHash:Hash,executionOrigin:z.enum([\"owner_attested_local\",\"hosted_execution\"]),qualification:HostedProfileCandidateExportSchema.shape.qualification,\n testedCandidateRelease:ImmutableReleaseRefSchema,activeRelease:ImmutableReleaseRefSchema,expectedCommit:Commit,committedProfileGit:Commit,\n executableSourceHash:Hash,protectedClosureHash:Hash,createdAt:z.string().datetime(),contentHash:Hash}).strict();\nexport type HostedProfileCandidateReceipt=z.infer<typeof HostedProfileCandidateReceiptSchema>;\nexport function verifyHostedProfileCandidateReceipt(raw:unknown){const value=HostedProfileCandidateReceiptSchema.parse(raw),{contentHash:hash,...body}=value;if(contentHash(body)!==hash||value.executionOrigin!==value.qualification.kind||value.qualification.ownerActorId!==value.actorId||value.qualification.teamId!==value.teamId)throw new Error(\"Hosted candidate receipt integrity differs.\");return value;}\nexport const HostedProfileCandidateCommandSchema=z.discriminatedUnion(\"operation\",[\n z.object({operation:z.literal(\"adopt\"),operationId:Id,export:HostedProfileCandidateExportSchema}).strict(),\n z.object({operation:z.enum([\"read\",\"rollback\"]),operationId:Id,adoptionOperationId:Id,profileRepositoryId:Id}).strict(),\n]);\n"],"mappings":"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","names":["z","z"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  fetchConnectedJson
3
- } from "./chunk-T4APHDES.js";
3
+ } from "./chunk-O6FKHAWN.js";
4
4
 
5
5
  // src/evaluation-coordination-http.ts
6
6
  import { z } from "zod";
@@ -34,4 +34,4 @@ var EvaluationCoordinationTransport = class {
34
34
  export {
35
35
  EvaluationCoordinationTransport
36
36
  };
37
- //# sourceMappingURL=chunk-YCQVVFE5.js.map
37
+ //# sourceMappingURL=chunk-3B5KSH3V.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/evaluation-coordination-http.ts"],"sourcesContent":["import {z} from \"zod\";\nimport {fetchConnectedJson} from \"./connected-evidence-http.js\";\nexport type EvaluationCoordinationAccess={baseUrl:string;apiKey:string;actorId:string;teamId:string;projectId:string|null;fetch?:typeof fetch};\n/** Bounded authenticated transport for the current evaluation owner. There is\n * no retry or operation allocation here; commands retain their reviewed IDs. */\nexport class EvaluationCoordinationTransport {\n readonly origin:string;\n constructor(readonly access:EvaluationCoordinationAccess){\n const url=new URL(access.baseUrl);\n if(![\"http:\",\"https:\"].includes(url.protocol)||url.username||url.password||url.search||url.hash||!access.apiKey.trim()||!access.actorId.trim()||!access.teamId.trim())throw new Error(\"Select the current evaluation owner and HTTP API origin.\");\n this.origin=url.toString().replace(/\\/+$/,\"\");\n }\n async post(path:\"experiment-evaluation-schedules\"|\"advanced-refiner-evaluations\",request:unknown,signal?:AbortSignal){\n const body=JSON.stringify({teamId:this.access.teamId,projectId:this.access.projectId,request});\n if(new TextEncoder().encode(body).byteLength>1_048_576)throw new Error(\"The reviewed evaluation command exceeds 1 MiB.\");\n const {response,value}=await fetchConnectedJson(this.access.fetch??fetch,`${this.origin}/v1/${path}`,{\n method:\"POST\",redirect:\"error\",headers:{Authorization:`Bearer ${this.access.apiKey}`,\"X-OpenPond-Team-Id\":this.access.teamId,\"Content-Type\":\"application/json\"},body,signal,\n },(status,code,message)=>Object.assign(new Error(message),{status,code}));\n if(!response.ok){const error=z.object({error:z.string().optional(),message:z.string().optional(),code:z.string().optional()}).passthrough().safeParse(value);throw Object.assign(new Error(error.success?error.data.error??error.data.message??\"Evaluation operation failed.\":\"Evaluation operation failed.\"),{status:response.status,code:error.success?error.data.code:undefined});}\n return value;\n }\n}\n"],"mappings":";;;;;AAAA,SAAQ,SAAQ;AAKT,IAAM,kCAAN,MAAsC;AAAA,EAE3C,YAAqB,QAAoC;AAApC;AACnB,UAAM,MAAI,IAAI,IAAI,OAAO,OAAO;AAChC,QAAG,CAAC,CAAC,SAAQ,QAAQ,EAAE,SAAS,IAAI,QAAQ,KAAG,IAAI,YAAU,IAAI,YAAU,IAAI,UAAQ,IAAI,QAAM,CAAC,OAAO,OAAO,KAAK,KAAG,CAAC,OAAO,QAAQ,KAAK,KAAG,CAAC,OAAO,OAAO,KAAK,EAAE,OAAM,IAAI,MAAM,0DAA0D;AAChP,SAAK,SAAO,IAAI,SAAS,EAAE,QAAQ,QAAO,EAAE;AAAA,EAC9C;AAAA,EAJqB;AAAA,EADZ;AAAA,EAMT,MAAM,KAAK,MAAsE,SAAgB,QAAoB;AACnH,UAAM,OAAK,KAAK,UAAU,EAAC,QAAO,KAAK,OAAO,QAAO,WAAU,KAAK,OAAO,WAAU,QAAO,CAAC;AAC7F,QAAG,IAAI,YAAY,EAAE,OAAO,IAAI,EAAE,aAAW,QAAU,OAAM,IAAI,MAAM,gDAAgD;AACvH,UAAM,EAAC,UAAS,MAAK,IAAE,MAAM,mBAAmB,KAAK,OAAO,SAAO,OAAM,GAAG,KAAK,MAAM,OAAO,IAAI,IAAG;AAAA,MACnG,QAAO;AAAA,MAAO,UAAS;AAAA,MAAQ,SAAQ,EAAC,eAAc,UAAU,KAAK,OAAO,MAAM,IAAG,sBAAqB,KAAK,OAAO,QAAO,gBAAe,mBAAkB;AAAA,MAAE;AAAA,MAAK;AAAA,IACvK,GAAE,CAAC,QAAO,MAAK,YAAU,OAAO,OAAO,IAAI,MAAM,OAAO,GAAE,EAAC,QAAO,KAAI,CAAC,CAAC;AACxE,QAAG,CAAC,SAAS,IAAG;AAAC,YAAM,QAAM,EAAE,OAAO,EAAC,OAAM,EAAE,OAAO,EAAE,SAAS,GAAE,SAAQ,EAAE,OAAO,EAAE,SAAS,GAAE,MAAK,EAAE,OAAO,EAAE,SAAS,EAAC,CAAC,EAAE,YAAY,EAAE,UAAU,KAAK;AAAE,YAAM,OAAO,OAAO,IAAI,MAAM,MAAM,UAAQ,MAAM,KAAK,SAAO,MAAM,KAAK,WAAS,iCAA+B,8BAA8B,GAAE,EAAC,QAAO,SAAS,QAAO,MAAK,MAAM,UAAQ,MAAM,KAAK,OAAK,OAAS,CAAC;AAAA,IAAE;AACrX,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  apiFetch,
3
3
  readApiJson
4
- } from "./chunk-CEZEVILU.js";
4
+ } from "./chunk-HJ2AIAKX.js";
5
5
 
6
6
  // src/profile-actions.ts
7
7
  var OpenPondProfileActionsClient = class {
@@ -69,4 +69,4 @@ function requiredValue(value, name) {
69
69
  export {
70
70
  OpenPondProfileActionsClient
71
71
  };
72
- //# sourceMappingURL=chunk-2DMYAJLS.js.map
72
+ //# sourceMappingURL=chunk-3DWPLYFJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/profile-actions.ts"],"sourcesContent":["import { apiFetch, readApiJson } from \"@openpond/cloud/api/core\";\n\nexport type OpenPondProfileActionSetupRequirement = {\n kind: string;\n key: string;\n label: string | null;\n required: boolean;\n status: string;\n warning: string | null;\n};\n\nexport type OpenPondProfileActionCatalogEntry = {\n /** Stable action key. This is the only action selector accepted by follow-up invocation APIs. */\n key: string;\n agentId: string;\n agentName: string;\n agentSlug: string;\n actionId: string;\n actionLabel: string;\n description: string;\n inputSchema: Record<string, unknown>;\n invokesModel: boolean;\n approvalPolicy: {\n required: boolean;\n risk: \"read\" | \"write\" | \"destructive\";\n };\n setupStatus: \"ready\" | \"setup_required\";\n setupRequirements: OpenPondProfileActionSetupRequirement[];\n requiredCapabilities: string[];\n};\n\nexport type OpenPondProfileActionCatalog = {\n profileId: string;\n profileName: string;\n /** Opaque source/action contract version used to reject catalog drift at invocation time. */\n catalogVersion: string;\n sourceCommitSha: string | null;\n actions: OpenPondProfileActionCatalogEntry[];\n};\n\nexport type OpenPondProfileActionInvocation<TOutput = Record<string, unknown>> = {\n run: {\n id: string;\n status: string;\n conversationId: string | null;\n resultJson: TOutput | null;\n };\n};\n\n/** A short-lived capability granted by the calling product for one Profile Action run. */\nexport type OpenPondExternalCapabilityLease = {\n provider: string;\n capabilities: string[];\n proxyUrl: string;\n bearerToken: string;\n expiresAt?: string;\n resourcePolicy?: Record<string, unknown>;\n};\n\ntype ProfileActionsClientInput = {\n apiKey: string;\n apiBaseUrl: string;\n};\n\nexport class OpenPondProfileActionsClient {\n readonly #apiKey: string;\n readonly #apiBaseUrl: string;\n\n constructor(input: ProfileActionsClientInput) {\n this.#apiKey = input.apiKey;\n this.#apiBaseUrl = input.apiBaseUrl.replace(/\\/+$/, \"\");\n }\n\n async catalog(input: {\n teamId: string;\n profileId?: string;\n profileName?: string;\n }): Promise<OpenPondProfileActionCatalog> {\n const teamId = requiredValue(input.teamId, \"teamId\");\n const search = new URLSearchParams({ teamId });\n if (input.profileId?.trim()) search.set(\"profileId\", input.profileId.trim());\n if (input.profileName?.trim()) {\n search.set(\"profileName\", input.profileName.trim());\n }\n const response = await apiFetch(\n this.#apiBaseUrl,\n this.#apiKey,\n `/v1/profile/actions?${search.toString()}`,\n );\n return (\n await readApiJson<{ catalog: OpenPondProfileActionCatalog }>(\n response,\n \"Get Profile Action catalog\",\n )\n ).catalog;\n }\n\n async run<TOutput = Record<string, unknown>>(input: {\n teamId: string;\n actionKey: string;\n profileId?: string;\n profileName?: string;\n value?: Record<string, unknown>;\n conversationId?: string | null;\n createConversation?: boolean;\n conversationTitle?: string | null;\n idempotencyKey: string;\n catalogVersion: string;\n externalCapabilityLeases?: OpenPondExternalCapabilityLease[];\n }): Promise<OpenPondProfileActionInvocation<TOutput>> {\n const teamId = requiredValue(input.teamId, \"teamId\");\n const actionKey = requiredValue(input.actionKey, \"actionKey\");\n const idempotencyKey = requiredValue(input.idempotencyKey, \"idempotencyKey\");\n const catalogVersion = requiredValue(input.catalogVersion, \"catalogVersion\");\n const response = await apiFetch(\n this.#apiBaseUrl,\n this.#apiKey,\n `/v1/profile/actions/run?${new URLSearchParams({ teamId }).toString()}`,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n ...(input.profileId?.trim() ? { profileId: input.profileId.trim() } : {}),\n ...(input.profileName?.trim() ? { profileName: input.profileName.trim() } : {}),\n actionKey,\n value: input.value ?? {},\n conversationId: input.conversationId ?? null,\n createConversation: input.createConversation,\n conversationTitle: input.conversationTitle ?? null,\n idempotencyKey,\n catalogVersion,\n externalCapabilityLeases: input.externalCapabilityLeases,\n }),\n },\n );\n return readApiJson<OpenPondProfileActionInvocation<TOutput>>(\n response,\n \"Run Profile Action\",\n );\n }\n}\n\nfunction requiredValue(value: string, name: string): string {\n const normalized = value.trim();\n if (!normalized) throw new Error(`${name} is required`);\n return normalized;\n}\n"],"mappings":";;;;;;AAgEO,IAAM,+BAAN,MAAmC;AAAA,EAC/B;AAAA,EACA;AAAA,EAET,YAAY,OAAkC;AAC5C,SAAK,UAAU,MAAM;AACrB,SAAK,cAAc,MAAM,WAAW,QAAQ,QAAQ,EAAE;AAAA,EACxD;AAAA,EAEA,MAAM,QAAQ,OAI4B;AACxC,UAAM,SAAS,cAAc,MAAM,QAAQ,QAAQ;AACnD,UAAM,SAAS,IAAI,gBAAgB,EAAE,OAAO,CAAC;AAC7C,QAAI,MAAM,WAAW,KAAK,EAAG,QAAO,IAAI,aAAa,MAAM,UAAU,KAAK,CAAC;AAC3E,QAAI,MAAM,aAAa,KAAK,GAAG;AAC7B,aAAO,IAAI,eAAe,MAAM,YAAY,KAAK,CAAC;AAAA,IACpD;AACA,UAAM,WAAW,MAAM;AAAA,MACrB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,uBAAuB,OAAO,SAAS,CAAC;AAAA,IAC1C;AACA,YACE,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,IACF,GACA;AAAA,EACJ;AAAA,EAEA,MAAM,IAAuC,OAYS;AACpD,UAAM,SAAS,cAAc,MAAM,QAAQ,QAAQ;AACnD,UAAM,YAAY,cAAc,MAAM,WAAW,WAAW;AAC5D,UAAM,iBAAiB,cAAc,MAAM,gBAAgB,gBAAgB;AAC3E,UAAM,iBAAiB,cAAc,MAAM,gBAAgB,gBAAgB;AAC3E,UAAM,WAAW,MAAM;AAAA,MACrB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,2BAA2B,IAAI,gBAAgB,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;AAAA,MACrE;AAAA,QACE,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,QAC9C,MAAM,KAAK,UAAU;AAAA,UACnB,GAAI,MAAM,WAAW,KAAK,IAAI,EAAE,WAAW,MAAM,UAAU,KAAK,EAAE,IAAI,CAAC;AAAA,UACvE,GAAI,MAAM,aAAa,KAAK,IAAI,EAAE,aAAa,MAAM,YAAY,KAAK,EAAE,IAAI,CAAC;AAAA,UAC7E;AAAA,UACA,OAAO,MAAM,SAAS,CAAC;AAAA,UACvB,gBAAgB,MAAM,kBAAkB;AAAA,UACxC,oBAAoB,MAAM;AAAA,UAC1B,mBAAmB,MAAM,qBAAqB;AAAA,UAC9C;AAAA,UACA;AAAA,UACA,0BAA0B,MAAM;AAAA,QAClC,CAAC;AAAA,MACH;AAAA,IACF;AACA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,cAAc,OAAe,MAAsB;AAC1D,QAAM,aAAa,MAAM,KAAK;AAC9B,MAAI,CAAC,WAAY,OAAM,IAAI,MAAM,GAAG,IAAI,cAAc;AACtD,SAAO;AACT;","names":[]}
@@ -1,17 +1,18 @@
1
1
  import {
2
+ CodexExperimentRuntimeSchema,
2
3
  EvaluationProjectContextSchema,
3
4
  ModelStarterAttemptPolicySchema,
4
5
  ModelStarterAttemptSummarySchema
5
- } from "./chunk-CK3ONRRC.js";
6
+ } from "./chunk-O54KGALH.js";
6
7
  import {
7
8
  ModelProjectVersionedRefSchema,
8
9
  canonicalJson,
9
10
  canonicalSha256
10
- } from "./chunk-TCHAWJMB.js";
11
+ } from "./chunk-CAMLCKSF.js";
11
12
  import {
12
13
  assertContentHash,
13
14
  contentHash
14
- } from "./chunk-COPVBJPL.js";
15
+ } from "./chunk-H3JZ3P5T.js";
15
16
 
16
17
  // src/harness-experiment-policy.ts
17
18
  import { z } from "zod";
@@ -36,6 +37,7 @@ var HarnessExperimentPolicySchema = z.object({
36
37
  maxOutputTokens: HarnessExperimentSamplingSchema.shape.maxOutputTokens.removeDefault().optional(),
37
38
  temperature: HarnessExperimentSamplingSchema.shape.temperature.removeDefault().optional(),
38
39
  topP: HarnessExperimentSamplingSchema.shape.topP.removeDefault().optional(),
40
+ localRuntime: CodexExperimentRuntimeSchema.optional(),
39
41
  candidate: z.object({ artifactId: Id, contentHash: Hash, preparationId: Id, dispatchId: Id, baseProfileId: Id, workerImageDigest: z.string().regex(/^sha256:[a-f0-9]{64}$/) }).strict().optional(),
40
42
  sourceCandidate: ProfileEvaluationRunSourceSchema.shape.sourceCandidate,
41
43
  reasoningEffort: z.enum(["off", "low", "medium", "high", "xhigh", "max"]).optional(),
@@ -128,7 +130,7 @@ var ModelTasksetRunResultSchema = z2.object({
128
130
  function verifyHarnessExperimentManifest(request, manifest) {
129
131
  assertContentHash(manifest, "Taskset run manifest");
130
132
  const policy = request.policy;
131
- if (policy.kind !== "hosted_harness" || manifest.execution.kind !== "harness" || canonicalJson(manifest.profileEvaluation) !== canonicalJson(policy.source) || canonicalJson(manifest.execution.harnessRelease) !== canonicalJson(policy.source.harnessRelease) || manifest.metadata.profileRepositoryId !== policy.profileRepositoryId || manifest.packageHash !== policy.packageHash || manifest.policy.kind !== "model" || manifest.policy.model.provider !== "openpond" || manifest.policy.model.model !== policy.modelId || manifest.policy.model.revision !== null || manifest.policy.model.artifactHash !== (policy.candidate?.contentHash ?? null) || manifest.policy.model.tokenizerRevision !== null || manifest.policy.model.chatTemplateHash !== null || manifest.policy.configurationHash !== policy.modelConfigurationHash || manifest.tasksetRelease.id !== request.taskset.id || manifest.tasksetRelease.contentHash !== request.taskset.contentHash || canonicalJson(manifest.population) !== canonicalJson(request.population) || manifest.population.some((member) => member.receiptId !== `evaluation-${contentHash(manifest.profileEvaluation?.externalDatasetBinding ? [manifest.id, member.taskId, member.seed, member.fixtureId] : [manifest.id, member.taskId, member.seed]).slice(0, 32)}`))
133
+ if (policy.kind !== "hosted_harness" || manifest.execution.kind !== "harness" || canonicalJson(manifest.profileEvaluation) !== canonicalJson(policy.source) || canonicalJson(manifest.execution.harnessRelease) !== canonicalJson(policy.source.harnessRelease) || manifest.metadata.profileRepositoryId !== policy.profileRepositoryId || manifest.packageHash !== policy.packageHash || manifest.policy.kind !== "model" || manifest.policy.model.provider !== (policy.localRuntime?.providerId ?? "openpond") || manifest.policy.model.model !== policy.modelId || manifest.policy.model.revision !== null || manifest.policy.model.artifactHash !== (policy.candidate?.contentHash ?? null) || manifest.policy.model.tokenizerRevision !== null || manifest.policy.model.chatTemplateHash !== null || manifest.policy.configurationHash !== policy.modelConfigurationHash || manifest.tasksetRelease.id !== request.taskset.id || manifest.tasksetRelease.contentHash !== request.taskset.contentHash || canonicalJson(manifest.population) !== canonicalJson(request.population) || manifest.population.some((member) => member.receiptId !== `evaluation-${contentHash(manifest.profileEvaluation?.externalDatasetBinding ? [manifest.id, member.taskId, member.seed, member.fixtureId] : [manifest.id, member.taskId, member.seed]).slice(0, 32)}`))
132
134
  throw new Error("Harness evaluation differs from its admitted source, package or model configuration.");
133
135
  }
134
136
  async function verifyModelTasksetRunDetails(value) {
@@ -175,4 +177,4 @@ export {
175
177
  verifyModelTasksetRunDetails,
176
178
  verifyModelTasksetRunResult
177
179
  };
178
- //# sourceMappingURL=chunk-ZJ3H3VS7.js.map
180
+ //# sourceMappingURL=chunk-6GQ3GIAP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/harness-experiment-policy.ts","../src/model-taskset-runs-contracts.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { ProfileEvaluationRunSourceSchema, ProfileExternalDatasetBindingSchema } from \"@openpond/evals\";\nimport { CodexExperimentRuntimeSchema } from \"./codex-experiment-runtime.js\";\n\nconst Id = z.string().trim().min(1).max(240);\nconst Hash = z.string().regex(/^[a-f0-9]{64}$/);\n\nexport const HarnessExperimentSamplingSchema = z.object({\n maxOutputTokens: z.number().int().min(1).max(1_000_000).default(4096),\n temperature: z.number().min(0).max(2).default(0),\n topP: z.number().gt(0).max(1).default(1),\n}).strict();\n\nexport function resolveHarnessExperimentSampling(input: {\n maxOutputTokens?: number; temperature?: number; topP?: number;\n}) {\n return HarnessExperimentSamplingSchema.parse({\n maxOutputTokens: input.maxOutputTokens, temperature: input.temperature, topP: input.topP,\n });\n}\n\n/** The host admits this released component through its native Harness engine.\n * Chat prompt/settings are owned by the released source, not replaced here. */\nexport const HarnessExperimentPolicySchema = z.object({\n kind: z.literal(\"hosted_harness\"),\n modelId: Id,\n maxOutputTokens: HarnessExperimentSamplingSchema.shape.maxOutputTokens.removeDefault().optional(),\n temperature: HarnessExperimentSamplingSchema.shape.temperature.removeDefault().optional(),\n topP: HarnessExperimentSamplingSchema.shape.topP.removeDefault().optional(),\n localRuntime: CodexExperimentRuntimeSchema.optional(),\n candidate:z.object({artifactId:Id,contentHash:Hash,preparationId:Id,dispatchId:Id,baseProfileId:Id,workerImageDigest:z.string().regex(/^sha256:[a-f0-9]{64}$/)}).strict().optional(),\n sourceCandidate:ProfileEvaluationRunSourceSchema.shape.sourceCandidate,\n reasoningEffort: z.enum([\"off\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"]).optional(),\n profileRepositoryId: Id,\n source: ProfileEvaluationRunSourceSchema,\n modelConfigurationHash: Hash,\n packageHash: Hash,\n externalDatasetBinding: ProfileExternalDatasetBindingSchema.optional(),\n}).strict().superRefine((value,context)=>{if(JSON.stringify(value.externalDatasetBinding??null)!==JSON.stringify(value.source.externalDatasetBinding??null))context.addIssue({code:\"custom\",message:\"The policy and source must bind the same external Dataset recipe.\"});if(JSON.stringify(value.sourceCandidate??null)!==JSON.stringify(value.source.sourceCandidate??null))context.addIssue({code:\"custom\",message:\"The policy and prepared source must bind the same actual source candidate.\"});});\nexport type HarnessExperimentPolicy = z.infer<typeof HarnessExperimentPolicySchema>;\n","import { z } from \"zod\";\nimport { EvaluationProjectContextSchema } from \"./evaluation-project-context.js\";\nimport { assertContentHash, contentHash } from \"@openpond/harness\";\nimport { TasksetRunManifestSchema, TasksetRunMemberSchema, TasksetMetricResultSchema, assertTasksetMetricResult, orderTasksetRunReceipts } from \"@openpond/evals/metrics\";\nimport { AttemptReceiptSchema } from \"@openpond/evals/runs\";\nimport { ModelProjectVersionedRefSchema } from \"./model-projects.js\";\nimport { ModelStarterAttemptPolicySchema, ModelStarterAttemptSummarySchema } from \"./model-starter-attempts.js\";\nimport { canonicalJson, canonicalSha256 } from \"./protocol.js\";\nimport { HarnessExperimentPolicySchema } from \"./harness-experiment-policy.js\";\nexport { HarnessExperimentPolicySchema, type HarnessExperimentPolicy } from \"./harness-experiment-policy.js\";\n\nconst IdSchema = z.string().trim().min(1).max(200);\nconst HashSchema = z.string().regex(/^[a-f0-9]{64}$/);\nexport const ModelTasksetRunPolicySchema = z.discriminatedUnion(\"kind\", [\n ModelStarterAttemptPolicySchema.options[0],\n z.object({ kind: z.literal(\"fixture\") }).strict(),\n HarnessExperimentPolicySchema,\n]);\nexport const ModelTasksetRunRequestSchema = z.object({\n schemaVersion: z.literal(\"openpond.modelTasksetRunRequest.v1\"),\n operationId: IdSchema, teamId: IdSchema, modelProjectId: IdSchema.nullable(),\n name: z.string().trim().min(1).max(200).optional(),\n project: EvaluationProjectContextSchema.optional(),\n taskset: ModelProjectVersionedRefSchema, policy: ModelTasksetRunPolicySchema,\n population: z.array(TasksetRunMemberSchema).min(1).max(10_000),\n}).strict().superRefine((value, context) => {\n if (new Set(value.population.map(member => member.receiptId)).size !== value.population.length) context.addIssue({ code: \"custom\", path: [\"population\"], message: \"Run receipt identities must be unique.\" });\n if (value.population.some(member => (member.fixtureId !== null) !== (value.policy.kind === \"fixture\"))) context.addIssue({ code: \"custom\", path: [\"population\"], message: \"Only fixture runs require a fixture identity for every member.\" });\n if (value.population.some(member => !/^(0|[1-9][0-9]*)$/.test(member.seed) || Number(member.seed) > 2_147_483_647)) context.addIssue({ code: \"custom\", path: [\"population\"], message: \"Hosted environment seeds must be integers from 0 to 2147483647.\" });\n if (value.policy.kind === \"hosted_harness\" && value.modelProjectId !== null)\n context.addIssue({ code: \"custom\", path: [\"modelProjectId\"], message: \"A Harness target retains its released Profile binding separately from Model artifacts.\" });\n if (value.policy.kind === \"hosted_harness\"\n && new Set(value.population.map(member => canonicalJson([member.taskId, member.seed]))).size !== value.population.length)\n context.addIssue({ code: \"custom\", path: [\"population\"], message: \"Harness case identities must be unique for each task and seed.\" });\n});\nexport type ModelTasksetRunRequest = z.infer<typeof ModelTasksetRunRequestSchema>;\nexport const ModelTasksetRunSummarySchema = z.object({\n schemaVersion: z.literal(\"openpond.modelTasksetRunSummary.v1\"),\n id: IdSchema, revision: z.number().int().positive(), teamId: IdSchema, modelProjectId: IdSchema.nullable(),\n name: z.string().trim().min(1).max(200).optional(),\n project: EvaluationProjectContextSchema.optional(),\n operationId: IdSchema, taskset: ModelProjectVersionedRefSchema, policyKind: z.enum([\"hosted_chat\", \"fixture\", \"hosted_harness\"]),\n manifestHash: HashSchema,\n status: z.enum([\"queued\", \"running\", \"cancelling\", \"completed\", \"failed\", \"cancelled\"]),\n totalCount: z.number().int().min(1).max(10_000),\n counts: z.object({ pending: z.number().int().nonnegative(), running: z.number().int().nonnegative(), completed: z.number().int().nonnegative(), failed: z.number().int().nonnegative(), cancelled: z.number().int().nonnegative() }).strict(),\n createdAt: z.iso.datetime(), startedAt: z.iso.datetime().nullable(), completedAt: z.iso.datetime().nullable(),\n cleanupComplete: z.boolean(), resultAvailable: z.boolean(), score: z.number().min(0).max(1).nullable(),\n metricName: z.string().min(1).max(240),\n error: z.object({ code: IdSchema, message: z.string().max(2_000) }).strict().nullable(),\n}).strict().superRefine((value, context) => {\n if (Object.values(value.counts).reduce((sum, count) => sum + count, 0) !== value.totalCount) context.addIssue({ code: \"custom\", path: [\"counts\"], message: \"Run counts must account for the complete population.\" });\n if (value.status !== \"completed\" && value.score !== null) context.addIssue({ code: \"custom\", path: [\"score\"], message: \"Only completed evaluations publish a metric value.\" });\n if ([\"completed\", \"failed\", \"cancelled\"].includes(value.status) && (!value.completedAt || value.counts.pending || value.counts.running)) context.addIssue({ code: \"custom\", message: \"Terminal runs require complete population accounting.\" });\n if (value.status === \"cancelled\" && !value.cleanupComplete) context.addIssue({ code: \"custom\", message: \"Cancelled runs require confirmed cleanup.\" });\n if (value.resultAvailable && ![\"completed\", \"failed\", \"cancelled\"].includes(value.status)) context.addIssue({ code: \"custom\", message: \"Run results require terminal population accounting.\" });\n if (value.status === \"completed\" && (!value.cleanupComplete || !value.resultAvailable)) context.addIssue({ code: \"custom\", message: \"Completed evaluations require retained results and confirmed cleanup.\" });\n});\nexport type ModelTasksetRunSummary = z.infer<typeof ModelTasksetRunSummarySchema>;\nexport const ModelTasksetRunDetailsSchema = z.object({\n summary: ModelTasksetRunSummarySchema,\n request: ModelTasksetRunRequestSchema,\n manifest: TasksetRunManifestSchema,\n policySnapshot: ModelStarterAttemptSummarySchema.shape.policySnapshot,\n}).strict();\nexport type ModelTasksetRunDetails = z.infer<typeof ModelTasksetRunDetailsSchema>;\nexport const ModelTasksetRunListQuerySchema = z.object({ modelProjectId: IdSchema.optional(), projectId: EvaluationProjectContextSchema.shape.id.optional(), afterId: IdSchema.optional(), limit: z.number().int().min(1).max(100).default(25) }).strict();\nexport const ModelTasksetRunPageSchema = z.object({ items: z.array(ModelTasksetRunSummarySchema).max(100), nextCursor: IdSchema.nullable() }).strict();\nexport const ModelTasksetRunResultSchema = z.object({\n schemaVersion: z.literal(\"openpond.modelTasksetRunResult.v1\"),\n run: ModelTasksetRunDetailsSchema,\n receipts: z.array(AttemptReceiptSchema).min(1).max(10_000),\n metric: TasksetMetricResultSchema.nullable(),\n contentHash: HashSchema,\n}).strict();\nexport type ModelTasksetRunResult = z.infer<typeof ModelTasksetRunResultSchema>;\n\nexport function verifyHarnessExperimentManifest(request: ModelTasksetRunRequest, manifest: z.infer<typeof TasksetRunManifestSchema>) {\n assertContentHash(manifest, \"Taskset run manifest\");\n const policy = request.policy;\n if (policy.kind !== \"hosted_harness\" || manifest.execution.kind !== \"harness\"\n || canonicalJson(manifest.profileEvaluation) !== canonicalJson(policy.source)\n || canonicalJson(manifest.execution.harnessRelease) !== canonicalJson(policy.source.harnessRelease)\n || manifest.metadata.profileRepositoryId !== policy.profileRepositoryId\n || manifest.packageHash !== policy.packageHash || manifest.policy.kind !== \"model\"\n || manifest.policy.model.provider !== (policy.localRuntime?.providerId ?? \"openpond\") || manifest.policy.model.model !== policy.modelId\n || manifest.policy.model.revision !== null || manifest.policy.model.artifactHash !== (policy.candidate?.contentHash??null)\n || manifest.policy.model.tokenizerRevision !== null || manifest.policy.model.chatTemplateHash !== null\n || manifest.policy.configurationHash !== policy.modelConfigurationHash\n || manifest.tasksetRelease.id !== request.taskset.id || manifest.tasksetRelease.contentHash !== request.taskset.contentHash\n || canonicalJson(manifest.population) !== canonicalJson(request.population)\n || manifest.population.some(member => member.receiptId !== `evaluation-${contentHash(manifest.profileEvaluation?.externalDatasetBinding\n ? [manifest.id, member.taskId, member.seed, member.fixtureId]\n : [manifest.id, member.taskId, member.seed]).slice(0, 32)}`))\n throw new Error(\"Harness evaluation differs from its admitted source, package or model configuration.\");\n}\n\n/** Server artifact ownership authenticates the producer. These checks bind all\n * portable projections to the admitted request, population and policy. */\nexport async function verifyModelTasksetRunDetails(value: unknown): Promise<ModelTasksetRunDetails> {\n const result = ModelTasksetRunDetailsSchema.parse(value);\n const { summary, request, manifest, policySnapshot } = result;\n assertContentHash(manifest, \"Taskset run manifest\");\n if (manifest.contentHash !== summary.manifestHash\n || manifest.id !== summary.id || manifest.createdAt !== summary.createdAt || summary.teamId !== request.teamId || summary.modelProjectId !== request.modelProjectId\n || canonicalJson(summary.project ?? null) !== canonicalJson(request.project ?? null)\n || canonicalJson(manifest.metadata.project ?? null) !== canonicalJson(request.project ?? null)\n || (summary.name ?? null) !== (request.name ?? null)\n || summary.operationId !== request.operationId || summary.policyKind !== request.policy.kind\n || summary.totalCount !== request.population.length || summary.metricName !== manifest.metricPolicy.primaryMetric\n || canonicalJson(summary.taskset) !== canonicalJson(request.taskset)\n || manifest.tasksetRelease.id !== request.taskset.id || manifest.tasksetRelease.contentHash !== request.taskset.contentHash\n || canonicalJson(manifest.population) !== canonicalJson(request.population)) throw new Error(\"Evaluation run differs from its admitted request or manifest.\");\n if (request.policy.kind === \"fixture\") {\n if (manifest.policy.kind !== \"fixture\" || policySnapshot !== null) throw new Error(\"Fixture checks cannot claim a model identity.\");\n } else if (request.policy.kind === \"hosted_harness\") {\n verifyHarnessExperimentManifest(request, manifest);\n if (policySnapshot !== null) throw new Error(\"Harness evaluations retain the native host model configuration.\");\n } else if (manifest.policy.kind !== \"model\" || !policySnapshot || policySnapshot.modelId !== request.policy.modelId\n || manifest.policy.model.provider !== policySnapshot.provider || manifest.policy.model.model !== policySnapshot.upstreamModelId\n || manifest.policy.model.revision !== null || manifest.policy.model.artifactHash !== (request.policy.candidate?.contentHash ?? null) || manifest.policy.model.tokenizerRevision !== null || manifest.policy.model.chatTemplateHash !== null\n || manifest.policy.configurationHash !== await canonicalSha256({ policy: request.policy, snapshot: policySnapshot })) throw new Error(\"Evaluation model differs from its admitted policy.\");\n return result;\n}\n\nexport async function verifyModelTasksetRunResult(value: unknown): Promise<ModelTasksetRunResult> {\n const result = ModelTasksetRunResultSchema.parse(value);\n const { contentHash: actual, ...content } = result;\n if (await canonicalSha256(content) !== actual) throw new Error(\"Evaluation result integrity failed.\");\n const { summary, manifest } = await verifyModelTasksetRunDetails(result.run);\n if (!summary.resultAvailable || ![\"completed\", \"failed\", \"cancelled\"].includes(summary.status)) throw new Error(\"Evaluation result is not terminal.\");\n const ordered = orderTasksetRunReceipts(manifest, result.receipts);\n if (canonicalJson(ordered) !== canonicalJson(result.receipts)) throw new Error(\"Evaluation receipts differ from the admitted order.\");\n if ((summary.status === \"completed\") !== (result.metric !== null)) throw new Error(\"Only completed evaluations retain a metric.\");\n if (result.metric) {\n assertTasksetMetricResult(result.metric);\n if (result.metric.runManifest.id !== manifest.id || result.metric.runManifest.contentHash !== manifest.contentHash\n || canonicalJson(result.metric.tasksetRelease) !== canonicalJson(manifest.tasksetRelease)\n || canonicalJson(result.metric.policy) !== canonicalJson(manifest.metricPolicy)\n || canonicalJson(result.metric.receiptRefs) !== canonicalJson(result.receipts.map(({ id, contentHash }) => ({ id, contentHash })))\n || result.metric.value !== summary.score) throw new Error(\"Evaluation metric differs from its admitted run or receipt population.\");\n }\n return result;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,SAAS,SAAS;AAClB,SAAS,kCAAkC,2CAA2C;AAGtF,IAAM,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAC3C,IAAM,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB;AAEvC,IAAM,kCAAkC,EAAE,OAAO;AAAA,EACtD,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAS,EAAE,QAAQ,IAAI;AAAA,EACpE,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,EAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AACzC,CAAC,EAAE,OAAO;AAEH,SAAS,iCAAiC,OAE9C;AACD,SAAO,gCAAgC,MAAM;AAAA,IAC3C,iBAAiB,MAAM;AAAA,IAAiB,aAAa,MAAM;AAAA,IAAa,MAAM,MAAM;AAAA,EACtF,CAAC;AACH;AAIO,IAAM,gCAAgC,EAAE,OAAO;AAAA,EACpD,MAAM,EAAE,QAAQ,gBAAgB;AAAA,EAChC,SAAS;AAAA,EACT,iBAAiB,gCAAgC,MAAM,gBAAgB,cAAc,EAAE,SAAS;AAAA,EAChG,aAAa,gCAAgC,MAAM,YAAY,cAAc,EAAE,SAAS;AAAA,EACxF,MAAM,gCAAgC,MAAM,KAAK,cAAc,EAAE,SAAS;AAAA,EAC1E,cAAc,6BAA6B,SAAS;AAAA,EACpD,WAAU,EAAE,OAAO,EAAC,YAAW,IAAG,aAAY,MAAK,eAAc,IAAG,YAAW,IAAG,eAAc,IAAG,mBAAkB,EAAE,OAAO,EAAE,MAAM,uBAAuB,EAAC,CAAC,EAAE,OAAO,EAAE,SAAS;AAAA,EACnL,iBAAgB,iCAAiC,MAAM;AAAA,EACvD,iBAAiB,EAAE,KAAK,CAAC,OAAO,OAAO,UAAU,QAAQ,SAAS,KAAK,CAAC,EAAE,SAAS;AAAA,EACnF,qBAAqB;AAAA,EACrB,QAAQ;AAAA,EACR,wBAAwB;AAAA,EACxB,aAAa;AAAA,EACb,wBAAwB,oCAAoC,SAAS;AACvE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,OAAM,YAAU;AAAC,MAAG,KAAK,UAAU,MAAM,0BAAwB,IAAI,MAAI,KAAK,UAAU,MAAM,OAAO,0BAAwB,IAAI,EAAE,SAAQ,SAAS,EAAC,MAAK,UAAS,SAAQ,oEAAmE,CAAC;AAAE,MAAG,KAAK,UAAU,MAAM,mBAAiB,IAAI,MAAI,KAAK,UAAU,MAAM,OAAO,mBAAiB,IAAI,EAAE,SAAQ,SAAS,EAAC,MAAK,UAAS,SAAQ,6EAA4E,CAAC;AAAE,CAAC;;;ACtCte,SAAS,KAAAA,UAAS;AAGlB,SAAS,0BAA0B,wBAAwB,2BAA2B,2BAA2B,+BAA+B;AAChJ,SAAS,4BAA4B;AAOrC,IAAM,WAAWC,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AACjD,IAAM,aAAaA,GAAE,OAAO,EAAE,MAAM,gBAAgB;AAC7C,IAAM,8BAA8BA,GAAE,mBAAmB,QAAQ;AAAA,EACtE,gCAAgC,QAAQ,CAAC;AAAA,EACzCA,GAAE,OAAO,EAAE,MAAMA,GAAE,QAAQ,SAAS,EAAE,CAAC,EAAE,OAAO;AAAA,EAChD;AACF,CAAC;AACM,IAAM,+BAA+BA,GAAE,OAAO;AAAA,EACnD,eAAeA,GAAE,QAAQ,oCAAoC;AAAA,EAC7D,aAAa;AAAA,EAAU,QAAQ;AAAA,EAAU,gBAAgB,SAAS,SAAS;AAAA,EAC3E,MAAMA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EACjD,SAAS,+BAA+B,SAAS;AAAA,EACjD,SAAS;AAAA,EAAgC,QAAQ;AAAA,EACjD,YAAYA,GAAE,MAAM,sBAAsB,EAAE,IAAI,CAAC,EAAE,IAAI,GAAM;AAC/D,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,YAAY;AAC1C,MAAI,IAAI,IAAI,MAAM,WAAW,IAAI,YAAU,OAAO,SAAS,CAAC,EAAE,SAAS,MAAM,WAAW,OAAQ,SAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,YAAY,GAAG,SAAS,yCAAyC,CAAC;AAC5M,MAAI,MAAM,WAAW,KAAK,YAAW,OAAO,cAAc,UAAW,MAAM,OAAO,SAAS,UAAU,EAAG,SAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,YAAY,GAAG,SAAS,iEAAiE,CAAC;AAC5O,MAAI,MAAM,WAAW,KAAK,YAAU,CAAC,oBAAoB,KAAK,OAAO,IAAI,KAAK,OAAO,OAAO,IAAI,IAAI,UAAa,EAAG,SAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,YAAY,GAAG,SAAS,kEAAkE,CAAC;AACzP,MAAI,MAAM,OAAO,SAAS,oBAAoB,MAAM,mBAAmB;AACrE,YAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,gBAAgB,GAAG,SAAS,yFAAyF,CAAC;AAClK,MAAI,MAAM,OAAO,SAAS,oBACrB,IAAI,IAAI,MAAM,WAAW,IAAI,YAAU,cAAc,CAAC,OAAO,QAAQ,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,MAAM,WAAW;AAClH,YAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,YAAY,GAAG,SAAS,iEAAiE,CAAC;AACxI,CAAC;AAEM,IAAM,+BAA+BA,GAAE,OAAO;AAAA,EACnD,eAAeA,GAAE,QAAQ,oCAAoC;AAAA,EAC7D,IAAI;AAAA,EAAU,UAAUA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EAAG,QAAQ;AAAA,EAAU,gBAAgB,SAAS,SAAS;AAAA,EACzG,MAAMA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EACjD,SAAS,+BAA+B,SAAS;AAAA,EACjD,aAAa;AAAA,EAAU,SAAS;AAAA,EAAgC,YAAYA,GAAE,KAAK,CAAC,eAAe,WAAW,gBAAgB,CAAC;AAAA,EAC/H,cAAc;AAAA,EACd,QAAQA,GAAE,KAAK,CAAC,UAAU,WAAW,cAAc,aAAa,UAAU,WAAW,CAAC;AAAA,EACtF,YAAYA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAM;AAAA,EAC9C,QAAQA,GAAE,OAAO,EAAE,SAASA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY,GAAG,SAASA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY,GAAG,WAAWA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY,GAAG,QAAQA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY,GAAG,WAAWA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,OAAO;AAAA,EAC5O,WAAWA,GAAE,IAAI,SAAS;AAAA,EAAG,WAAWA,GAAE,IAAI,SAAS,EAAE,SAAS;AAAA,EAAG,aAAaA,GAAE,IAAI,SAAS,EAAE,SAAS;AAAA,EAC5G,iBAAiBA,GAAE,QAAQ;AAAA,EAAG,iBAAiBA,GAAE,QAAQ;AAAA,EAAG,OAAOA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACrG,YAAYA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACrC,OAAOA,GAAE,OAAO,EAAE,MAAM,UAAU,SAASA,GAAE,OAAO,EAAE,IAAI,GAAK,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS;AACxF,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,YAAY;AAC1C,MAAI,OAAO,OAAO,MAAM,MAAM,EAAE,OAAO,CAAC,KAAK,UAAU,MAAM,OAAO,CAAC,MAAM,MAAM,WAAY,SAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,QAAQ,GAAG,SAAS,uDAAuD,CAAC;AACnN,MAAI,MAAM,WAAW,eAAe,MAAM,UAAU,KAAM,SAAQ,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,OAAO,GAAG,SAAS,qDAAqD,CAAC;AAC7K,MAAI,CAAC,aAAa,UAAU,WAAW,EAAE,SAAS,MAAM,MAAM,MAAM,CAAC,MAAM,eAAe,MAAM,OAAO,WAAW,MAAM,OAAO,SAAU,SAAQ,SAAS,EAAE,MAAM,UAAU,SAAS,wDAAwD,CAAC;AAC9O,MAAI,MAAM,WAAW,eAAe,CAAC,MAAM,gBAAiB,SAAQ,SAAS,EAAE,MAAM,UAAU,SAAS,4CAA4C,CAAC;AACrJ,MAAI,MAAM,mBAAmB,CAAC,CAAC,aAAa,UAAU,WAAW,EAAE,SAAS,MAAM,MAAM,EAAG,SAAQ,SAAS,EAAE,MAAM,UAAU,SAAS,sDAAsD,CAAC;AAC9L,MAAI,MAAM,WAAW,gBAAgB,CAAC,MAAM,mBAAmB,CAAC,MAAM,iBAAkB,SAAQ,SAAS,EAAE,MAAM,UAAU,SAAS,wEAAwE,CAAC;AAC/M,CAAC;AAEM,IAAM,+BAA+BA,GAAE,OAAO;AAAA,EACnD,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AAAA,EACV,gBAAgB,iCAAiC,MAAM;AACzD,CAAC,EAAE,OAAO;AAEH,IAAM,iCAAiCA,GAAE,OAAO,EAAE,gBAAgB,SAAS,SAAS,GAAG,WAAW,+BAA+B,MAAM,GAAG,SAAS,GAAG,SAAS,SAAS,SAAS,GAAG,OAAOA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO;AAClP,IAAM,4BAA4BA,GAAE,OAAO,EAAE,OAAOA,GAAE,MAAM,4BAA4B,EAAE,IAAI,GAAG,GAAG,YAAY,SAAS,SAAS,EAAE,CAAC,EAAE,OAAO;AAC9I,IAAM,8BAA8BA,GAAE,OAAO;AAAA,EAClD,eAAeA,GAAE,QAAQ,mCAAmC;AAAA,EAC5D,KAAK;AAAA,EACL,UAAUA,GAAE,MAAM,oBAAoB,EAAE,IAAI,CAAC,EAAE,IAAI,GAAM;AAAA,EACzD,QAAQ,0BAA0B,SAAS;AAAA,EAC3C,aAAa;AACf,CAAC,EAAE,OAAO;AAGH,SAAS,gCAAgC,SAAiC,UAAoD;AACnI,oBAAkB,UAAU,sBAAsB;AAClD,QAAM,SAAS,QAAQ;AACvB,MAAI,OAAO,SAAS,oBAAoB,SAAS,UAAU,SAAS,aAC/D,cAAc,SAAS,iBAAiB,MAAM,cAAc,OAAO,MAAM,KACzE,cAAc,SAAS,UAAU,cAAc,MAAM,cAAc,OAAO,OAAO,cAAc,KAC/F,SAAS,SAAS,wBAAwB,OAAO,uBACjD,SAAS,gBAAgB,OAAO,eAAe,SAAS,OAAO,SAAS,WACxE,SAAS,OAAO,MAAM,cAAc,OAAO,cAAc,cAAc,eAAe,SAAS,OAAO,MAAM,UAAU,OAAO,WAC7H,SAAS,OAAO,MAAM,aAAa,QAAQ,SAAS,OAAO,MAAM,kBAAkB,OAAO,WAAW,eAAa,SAClH,SAAS,OAAO,MAAM,sBAAsB,QAAQ,SAAS,OAAO,MAAM,qBAAqB,QAC/F,SAAS,OAAO,sBAAsB,OAAO,0BAC7C,SAAS,eAAe,OAAO,QAAQ,QAAQ,MAAM,SAAS,eAAe,gBAAgB,QAAQ,QAAQ,eAC7G,cAAc,SAAS,UAAU,MAAM,cAAc,QAAQ,UAAU,KACvE,SAAS,WAAW,KAAK,YAAU,OAAO,cAAc,cAAc,YAAY,SAAS,mBAAmB,yBAC7G,CAAC,SAAS,IAAI,OAAO,QAAQ,OAAO,MAAM,OAAO,SAAS,IAC1D,CAAC,SAAS,IAAI,OAAO,QAAQ,OAAO,IAAI,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE;AAC7D,UAAM,IAAI,MAAM,sFAAsF;AAC1G;AAIA,eAAsB,6BAA6B,OAAiD;AAClG,QAAM,SAAS,6BAA6B,MAAM,KAAK;AACvD,QAAM,EAAE,SAAS,SAAS,UAAU,eAAe,IAAI;AACvD,oBAAkB,UAAU,sBAAsB;AAClD,MAAI,SAAS,gBAAgB,QAAQ,gBAChC,SAAS,OAAO,QAAQ,MAAM,SAAS,cAAc,QAAQ,aAAa,QAAQ,WAAW,QAAQ,UAAU,QAAQ,mBAAmB,QAAQ,kBAClJ,cAAc,QAAQ,WAAW,IAAI,MAAM,cAAc,QAAQ,WAAW,IAAI,KAChF,cAAc,SAAS,SAAS,WAAW,IAAI,MAAM,cAAc,QAAQ,WAAW,IAAI,MACzF,QAAQ,QAAQ,WAAW,QAAQ,QAAQ,SAC5C,QAAQ,gBAAgB,QAAQ,eAAe,QAAQ,eAAe,QAAQ,OAAO,QACrF,QAAQ,eAAe,QAAQ,WAAW,UAAU,QAAQ,eAAe,SAAS,aAAa,iBACjG,cAAc,QAAQ,OAAO,MAAM,cAAc,QAAQ,OAAO,KAChE,SAAS,eAAe,OAAO,QAAQ,QAAQ,MAAM,SAAS,eAAe,gBAAgB,QAAQ,QAAQ,eAC7G,cAAc,SAAS,UAAU,MAAM,cAAc,QAAQ,UAAU,EAAG,OAAM,IAAI,MAAM,+DAA+D;AAC9J,MAAI,QAAQ,OAAO,SAAS,WAAW;AACrC,QAAI,SAAS,OAAO,SAAS,aAAa,mBAAmB,KAAM,OAAM,IAAI,MAAM,+CAA+C;AAAA,EACpI,WAAW,QAAQ,OAAO,SAAS,kBAAkB;AACnD,oCAAgC,SAAS,QAAQ;AACjD,QAAI,mBAAmB,KAAM,OAAM,IAAI,MAAM,iEAAiE;AAAA,EAChH,WAAW,SAAS,OAAO,SAAS,WAAW,CAAC,kBAAkB,eAAe,YAAY,QAAQ,OAAO,WACvG,SAAS,OAAO,MAAM,aAAa,eAAe,YAAY,SAAS,OAAO,MAAM,UAAU,eAAe,mBAC7G,SAAS,OAAO,MAAM,aAAa,QAAQ,SAAS,OAAO,MAAM,kBAAkB,QAAQ,OAAO,WAAW,eAAe,SAAS,SAAS,OAAO,MAAM,sBAAsB,QAAQ,SAAS,OAAO,MAAM,qBAAqB,QACpO,SAAS,OAAO,sBAAsB,MAAM,gBAAgB,EAAE,QAAQ,QAAQ,QAAQ,UAAU,eAAe,CAAC,EAAG,OAAM,IAAI,MAAM,oDAAoD;AAC5L,SAAO;AACT;AAEA,eAAsB,4BAA4B,OAAgD;AAChG,QAAM,SAAS,4BAA4B,MAAM,KAAK;AACtD,QAAM,EAAE,aAAa,QAAQ,GAAG,QAAQ,IAAI;AAC5C,MAAI,MAAM,gBAAgB,OAAO,MAAM,OAAQ,OAAM,IAAI,MAAM,qCAAqC;AACpG,QAAM,EAAE,SAAS,SAAS,IAAI,MAAM,6BAA6B,OAAO,GAAG;AAC3E,MAAI,CAAC,QAAQ,mBAAmB,CAAC,CAAC,aAAa,UAAU,WAAW,EAAE,SAAS,QAAQ,MAAM,EAAG,OAAM,IAAI,MAAM,oCAAoC;AACpJ,QAAM,UAAU,wBAAwB,UAAU,OAAO,QAAQ;AACjE,MAAI,cAAc,OAAO,MAAM,cAAc,OAAO,QAAQ,EAAG,OAAM,IAAI,MAAM,qDAAqD;AACpI,MAAK,QAAQ,WAAW,iBAAkB,OAAO,WAAW,MAAO,OAAM,IAAI,MAAM,6CAA6C;AAChI,MAAI,OAAO,QAAQ;AACjB,8BAA0B,OAAO,MAAM;AACvC,QAAI,OAAO,OAAO,YAAY,OAAO,SAAS,MAAM,OAAO,OAAO,YAAY,gBAAgB,SAAS,eAClG,cAAc,OAAO,OAAO,cAAc,MAAM,cAAc,SAAS,cAAc,KACrF,cAAc,OAAO,OAAO,MAAM,MAAM,cAAc,SAAS,YAAY,KAC3E,cAAc,OAAO,OAAO,WAAW,MAAM,cAAc,OAAO,SAAS,IAAI,CAAC,EAAE,IAAI,aAAAC,aAAY,OAAO,EAAE,IAAI,aAAAA,aAAY,EAAE,CAAC,KAC9H,OAAO,OAAO,UAAU,QAAQ,MAAO,OAAM,IAAI,MAAM,wEAAwE;AAAA,EACtI;AACA,SAAO;AACT;","names":["z","z","contentHash"]}