openpond-sdk 0.12.13 → 0.12.15

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 (301) hide show
  1. package/TRAINING_WORKFLOWS.md +497 -4
  2. package/dist/advanced-refiner-evaluations.js +7 -7
  3. package/dist/candidate-evaluations.js +6 -6
  4. package/dist/{chunk-TLSP5JKG.js → chunk-3BYFS4RO.js} +2 -2
  5. package/dist/{chunk-XRBM6PBD.js → chunk-3MDNVNBM.js} +5 -5
  6. package/dist/{chunk-CNREFTAV.js → chunk-3VUF5H3B.js} +2 -2
  7. package/dist/{chunk-LHHHJIDR.js → chunk-626JLH4D.js} +2 -2
  8. package/dist/{chunk-Q4TKI2MV.js → chunk-774OWTCD.js} +63 -80
  9. package/dist/chunk-774OWTCD.js.map +1 -0
  10. package/dist/{chunk-HAQPGTQ4.js → chunk-7F43U2NC.js} +2 -2
  11. package/dist/{chunk-ORYA2G7S.js → chunk-7G47YXQT.js} +3 -3
  12. package/dist/{chunk-XMVSQIK4.js → chunk-AG6UJ3DI.js} +2 -2
  13. package/dist/chunk-EBB36D5X.js +866 -0
  14. package/dist/chunk-EBB36D5X.js.map +1 -0
  15. package/dist/{chunk-JBYFD3QS.js → chunk-GBDBKGXW.js} +3 -3
  16. package/dist/{chunk-GHPCQXG5.js → chunk-GCUWJUUM.js} +2 -2
  17. package/dist/{chunk-C4W2MEFP.js → chunk-GS5HEE4M.js} +2 -2
  18. package/dist/{chunk-ATVQQCYN.js → chunk-GWXJSBWR.js} +2 -2
  19. package/dist/{chunk-RLW4Y5ZV.js → chunk-JMFYNIYZ.js} +4 -3
  20. package/dist/chunk-JMFYNIYZ.js.map +1 -0
  21. package/dist/{chunk-UOV2LEXS.js → chunk-MVAEE5EI.js} +60 -3
  22. package/dist/chunk-MVAEE5EI.js.map +1 -0
  23. package/dist/{chunk-KOJC3TH4.js → chunk-OBI2MQYU.js} +6 -6
  24. package/dist/chunk-PMVSO23F.js +65 -0
  25. package/dist/chunk-PMVSO23F.js.map +1 -0
  26. package/dist/{chunk-JDQVAG3R.js → chunk-Q4RGCEOI.js} +3 -3
  27. package/dist/{chunk-YIGFQWZV.js → chunk-QIGMNB6M.js} +3 -3
  28. package/dist/{chunk-O3NOGKMT.js → chunk-QNOCM5JX.js} +2 -2
  29. package/dist/{chunk-2LVR24GU.js → chunk-QOX57Y27.js} +6 -6
  30. package/dist/chunk-QTNYXOJW.js +27 -0
  31. package/dist/chunk-QTNYXOJW.js.map +1 -0
  32. package/dist/{chunk-UWY5PUHR.js → chunk-RN5MK7NH.js} +2 -2
  33. package/dist/{chunk-47I6LT4X.js → chunk-RT7SQHO4.js} +271 -7
  34. package/dist/chunk-RT7SQHO4.js.map +1 -0
  35. package/dist/chunk-UVQENVTW.js +85 -0
  36. package/dist/chunk-UVQENVTW.js.map +1 -0
  37. package/dist/{chunk-7BYLH47N.js → chunk-VPK3SM45.js} +15 -3
  38. package/dist/{chunk-7BYLH47N.js.map → chunk-VPK3SM45.js.map} +1 -1
  39. package/dist/{chunk-RN5G3DQN.js → chunk-WM3U4RPZ.js} +6 -6
  40. package/dist/{chunk-IFBCLRBM.js → chunk-ZQ6QTYRE.js} +2 -2
  41. package/dist/{chunk-IFBCLRBM.js.map → chunk-ZQ6QTYRE.js.map} +1 -1
  42. package/dist/{chunk-K54BDIKL.js → chunk-ZQFROKKS.js} +3 -3
  43. package/dist/{chunk-ZYDDHHZZ.js → chunk-ZRTNR4U7.js} +3 -3
  44. package/dist/connected-evidence.js +9 -17
  45. package/dist/dataset-workspaces.js +12 -17
  46. package/dist/dataset-workspaces.js.map +1 -1
  47. package/dist/errors.js +3 -3
  48. package/dist/experiment-evaluation-schedules.js +18 -21
  49. package/dist/experiment-improvements.js +9 -8
  50. package/dist/experiments.js +17 -20
  51. package/dist/index.js +25 -27
  52. package/dist/index.js.map +1 -1
  53. package/dist/model-projects.js +1 -1
  54. package/dist/model-starter-attempts.js +2 -2
  55. package/dist/model-starter-catalog.js +4 -12
  56. package/dist/model-starter-catalog.js.map +1 -1
  57. package/dist/model-starters.js +4 -12
  58. package/dist/model-taskset-runs.js +3 -3
  59. package/dist/post-training.js +6 -6
  60. package/dist/taskset-drafts.js +6 -15
  61. package/dist/taskset-drafts.js.map +1 -1
  62. package/dist/taskset-packages.js +28 -18
  63. package/dist/tool-learning-local-store.js +2 -1
  64. package/dist/tool-learning-local-store.js.map +1 -1
  65. package/dist/training-bundle.js +33 -32
  66. package/dist/training-bundle.js.map +1 -1
  67. package/dist/training.js +8483 -49
  68. package/dist/training.js.map +1 -1
  69. package/dist/types/packages/cloud/src/sandbox/types/billing.d.ts +87 -6
  70. package/dist/types/packages/cloud/src/sandbox/types/billing.d.ts.map +1 -1
  71. package/dist/types/packages/cloud/src/sandbox/types/io.d.ts +3 -0
  72. package/dist/types/packages/cloud/src/sandbox/types/io.d.ts.map +1 -1
  73. package/dist/types/packages/sdk/src/activation-experiment-draft.d.ts +70 -0
  74. package/dist/types/packages/sdk/src/activation-experiment-draft.d.ts.map +1 -0
  75. package/dist/types/packages/sdk/src/activation-form-compiler.d.ts +25 -0
  76. package/dist/types/packages/sdk/src/activation-form-compiler.d.ts.map +1 -0
  77. package/dist/types/packages/sdk/src/activation-reference.d.ts +347 -0
  78. package/dist/types/packages/sdk/src/activation-reference.d.ts.map +1 -0
  79. package/dist/types/packages/sdk/src/activation-result-comparison.d.ts +185 -0
  80. package/dist/types/packages/sdk/src/activation-result-comparison.d.ts.map +1 -0
  81. package/dist/types/packages/sdk/src/alphaedit-artifact.d.ts +872 -0
  82. package/dist/types/packages/sdk/src/alphaedit-artifact.d.ts.map +1 -0
  83. package/dist/types/packages/sdk/src/alphaedit-experiment-draft.d.ts +123 -0
  84. package/dist/types/packages/sdk/src/alphaedit-experiment-draft.d.ts.map +1 -0
  85. package/dist/types/packages/sdk/src/alphaedit-model-serving.d.ts +3218 -0
  86. package/dist/types/packages/sdk/src/alphaedit-model-serving.d.ts.map +1 -0
  87. package/dist/types/packages/sdk/src/alphaedit.d.ts +258 -0
  88. package/dist/types/packages/sdk/src/alphaedit.d.ts.map +1 -0
  89. package/dist/types/packages/sdk/src/dataset-training-review-contracts.d.ts +181 -0
  90. package/dist/types/packages/sdk/src/dataset-training-review-contracts.d.ts.map +1 -0
  91. package/dist/types/packages/sdk/src/dataset-training-review-files.d.ts +17 -0
  92. package/dist/types/packages/sdk/src/dataset-training-review-files.d.ts.map +1 -0
  93. package/dist/types/packages/sdk/src/dataset-training-review-preparation.d.ts +541 -0
  94. package/dist/types/packages/sdk/src/dataset-training-review-preparation.d.ts.map +1 -0
  95. package/dist/types/packages/sdk/src/dataset-training-review-source.d.ts +41 -0
  96. package/dist/types/packages/sdk/src/dataset-training-review-source.d.ts.map +1 -0
  97. package/dist/types/packages/sdk/src/dataset-training-review.d.ts +79 -0
  98. package/dist/types/packages/sdk/src/dataset-training-review.d.ts.map +1 -0
  99. package/dist/types/packages/sdk/src/decision-experiment-authoring.d.ts +11 -0
  100. package/dist/types/packages/sdk/src/decision-experiment-authoring.d.ts.map +1 -0
  101. package/dist/types/packages/sdk/src/decision-experiment-draft.d.ts +150 -0
  102. package/dist/types/packages/sdk/src/decision-experiment-draft.d.ts.map +1 -0
  103. package/dist/types/packages/sdk/src/decision-model-artifact.d.ts +541 -0
  104. package/dist/types/packages/sdk/src/decision-model-artifact.d.ts.map +1 -0
  105. package/dist/types/packages/sdk/src/decision-model-data.d.ts +588 -0
  106. package/dist/types/packages/sdk/src/decision-model-data.d.ts.map +1 -0
  107. package/dist/types/packages/sdk/src/decision-model-scoring.d.ts +1587 -0
  108. package/dist/types/packages/sdk/src/decision-model-scoring.d.ts.map +1 -0
  109. package/dist/types/packages/sdk/src/decision-model-serving.d.ts +5328 -0
  110. package/dist/types/packages/sdk/src/decision-model-serving.d.ts.map +1 -0
  111. package/dist/types/packages/sdk/src/decision-model-training.d.ts +871 -0
  112. package/dist/types/packages/sdk/src/decision-model-training.d.ts.map +1 -0
  113. package/dist/types/packages/sdk/src/decision-model-version.d.ts +2971 -0
  114. package/dist/types/packages/sdk/src/decision-model-version.d.ts.map +1 -0
  115. package/dist/types/packages/sdk/src/decision-model.d.ts +241 -0
  116. package/dist/types/packages/sdk/src/decision-model.d.ts.map +1 -0
  117. package/dist/types/packages/sdk/src/engram-adapter.d.ts +788 -0
  118. package/dist/types/packages/sdk/src/engram-adapter.d.ts.map +1 -0
  119. package/dist/types/packages/sdk/src/engram-experiment-authoring.d.ts +14 -0
  120. package/dist/types/packages/sdk/src/engram-experiment-authoring.d.ts.map +1 -0
  121. package/dist/types/packages/sdk/src/engram-experiment-draft.d.ts +92 -0
  122. package/dist/types/packages/sdk/src/engram-experiment-draft.d.ts.map +1 -0
  123. package/dist/types/packages/sdk/src/engram-inference.d.ts +180 -0
  124. package/dist/types/packages/sdk/src/engram-inference.d.ts.map +1 -0
  125. package/dist/types/packages/sdk/src/engram-model-serving.d.ts +2183 -0
  126. package/dist/types/packages/sdk/src/engram-model-serving.d.ts.map +1 -0
  127. package/dist/types/packages/sdk/src/engram-model-version.d.ts +1335 -0
  128. package/dist/types/packages/sdk/src/engram-model-version.d.ts.map +1 -0
  129. package/dist/types/packages/sdk/src/evaluation-experiment-draft.d.ts +1009 -0
  130. package/dist/types/packages/sdk/src/evaluation-experiment-draft.d.ts.map +1 -0
  131. package/dist/types/packages/sdk/src/experiment-client.d.ts +686 -686
  132. package/dist/types/packages/sdk/src/experiment-draft-storage.d.ts +11638 -0
  133. package/dist/types/packages/sdk/src/experiment-draft-storage.d.ts.map +1 -0
  134. package/dist/types/packages/sdk/src/experiment-result-reference.d.ts +288 -0
  135. package/dist/types/packages/sdk/src/experiment-result-reference.d.ts.map +1 -0
  136. package/dist/types/packages/sdk/src/experiment-run-details.d.ts +7 -7
  137. package/dist/types/packages/sdk/src/experiment-starting-model.d.ts +911 -0
  138. package/dist/types/packages/sdk/src/experiment-starting-model.d.ts.map +1 -0
  139. package/dist/types/packages/sdk/src/hosted-evaluation-experiment-draft.d.ts +693 -0
  140. package/dist/types/packages/sdk/src/hosted-evaluation-experiment-draft.d.ts.map +1 -0
  141. package/dist/types/packages/sdk/src/managed-alphaedit-executions.d.ts +3152 -0
  142. package/dist/types/packages/sdk/src/managed-alphaedit-executions.d.ts.map +1 -0
  143. package/dist/types/packages/sdk/src/managed-compute-price.d.ts +50 -0
  144. package/dist/types/packages/sdk/src/managed-compute-price.d.ts.map +1 -0
  145. package/dist/types/packages/sdk/src/managed-decision-executions.d.ts +6755 -0
  146. package/dist/types/packages/sdk/src/managed-decision-executions.d.ts.map +1 -0
  147. package/dist/types/packages/sdk/src/managed-engram-executions.d.ts +2774 -0
  148. package/dist/types/packages/sdk/src/managed-engram-executions.d.ts.map +1 -0
  149. package/dist/types/packages/sdk/src/managed-modification-compilation.d.ts +523 -0
  150. package/dist/types/packages/sdk/src/managed-modification-compilation.d.ts.map +1 -0
  151. package/dist/types/packages/sdk/src/managed-modification-executions.d.ts +1470 -0
  152. package/dist/types/packages/sdk/src/managed-modification-executions.d.ts.map +1 -0
  153. package/dist/types/packages/sdk/src/managed-neuron-training-executions.d.ts +3447 -0
  154. package/dist/types/packages/sdk/src/managed-neuron-training-executions.d.ts.map +1 -0
  155. package/dist/types/packages/sdk/src/managed-serving-usage.d.ts +228 -0
  156. package/dist/types/packages/sdk/src/managed-serving-usage.d.ts.map +1 -0
  157. package/dist/types/packages/sdk/src/managed-training-preparation.d.ts +26 -26
  158. package/dist/types/packages/sdk/src/managed-training-preparation.d.ts.map +1 -1
  159. package/dist/types/packages/sdk/src/model-batch-review-contracts.d.ts +11 -0
  160. package/dist/types/packages/sdk/src/model-batch-review-contracts.d.ts.map +1 -1
  161. package/dist/types/packages/sdk/src/model-batch-review-preparation.d.ts +10 -0
  162. package/dist/types/packages/sdk/src/model-batch-review-preparation.d.ts.map +1 -1
  163. package/dist/types/packages/sdk/src/model-batch-review.d.ts +21 -0
  164. package/dist/types/packages/sdk/src/model-batch-review.d.ts.map +1 -1
  165. package/dist/types/packages/sdk/src/model-learning-policy.d.ts +9 -0
  166. package/dist/types/packages/sdk/src/model-learning-policy.d.ts.map +1 -1
  167. package/dist/types/packages/sdk/src/model-modification-capabilities.d.ts +323 -0
  168. package/dist/types/packages/sdk/src/model-modification-capabilities.d.ts.map +1 -0
  169. package/dist/types/packages/sdk/src/model-serving-pool.d.ts +28 -0
  170. package/dist/types/packages/sdk/src/model-serving-pool.d.ts.map +1 -0
  171. package/dist/types/packages/sdk/src/model-starter-attempts.d.ts +22 -0
  172. package/dist/types/packages/sdk/src/model-starter-attempts.d.ts.map +1 -1
  173. package/dist/types/packages/sdk/src/model-taskset-runs.d.ts +216 -216
  174. package/dist/types/packages/sdk/src/modification-recordings.d.ts +1303 -0
  175. package/dist/types/packages/sdk/src/modification-recordings.d.ts.map +1 -0
  176. package/dist/types/packages/sdk/src/neuron-calibration-records.d.ts +816 -0
  177. package/dist/types/packages/sdk/src/neuron-calibration-records.d.ts.map +1 -0
  178. package/dist/types/packages/sdk/src/neuron-residual-calibration.d.ts +189 -0
  179. package/dist/types/packages/sdk/src/neuron-residual-calibration.d.ts.map +1 -0
  180. package/dist/types/packages/sdk/src/neuron-steering.d.ts +260 -0
  181. package/dist/types/packages/sdk/src/neuron-steering.d.ts.map +1 -0
  182. package/dist/types/packages/sdk/src/neuron-training-artifact.d.ts +517 -0
  183. package/dist/types/packages/sdk/src/neuron-training-artifact.d.ts.map +1 -0
  184. package/dist/types/packages/sdk/src/neuron-training-experiment-draft.d.ts +172 -0
  185. package/dist/types/packages/sdk/src/neuron-training-experiment-draft.d.ts.map +1 -0
  186. package/dist/types/packages/sdk/src/neuron-training-model-serving.d.ts +3502 -0
  187. package/dist/types/packages/sdk/src/neuron-training-model-serving.d.ts.map +1 -0
  188. package/dist/types/packages/sdk/src/neuron-training-result.d.ts +590 -0
  189. package/dist/types/packages/sdk/src/neuron-training-result.d.ts.map +1 -0
  190. package/dist/types/packages/sdk/src/neuron-training.d.ts +260 -0
  191. package/dist/types/packages/sdk/src/neuron-training.d.ts.map +1 -0
  192. package/dist/types/packages/sdk/src/post-training.d.ts +21 -0
  193. package/dist/types/packages/sdk/src/post-training.d.ts.map +1 -1
  194. package/dist/types/packages/sdk/src/profile-external-dataset-package.d.ts +10 -0
  195. package/dist/types/packages/sdk/src/profile-external-dataset-package.d.ts.map +1 -1
  196. package/dist/types/packages/sdk/src/steering-experiment-authoring.d.ts +15 -0
  197. package/dist/types/packages/sdk/src/steering-experiment-authoring.d.ts.map +1 -0
  198. package/dist/types/packages/sdk/src/steering-experiment-source-verification.d.ts +97 -0
  199. package/dist/types/packages/sdk/src/steering-experiment-source-verification.d.ts.map +1 -0
  200. package/dist/types/packages/sdk/src/steering-experiment-source.d.ts +29 -0
  201. package/dist/types/packages/sdk/src/steering-experiment-source.d.ts.map +1 -0
  202. package/dist/types/packages/sdk/src/steering-inference.d.ts +224 -0
  203. package/dist/types/packages/sdk/src/steering-inference.d.ts.map +1 -0
  204. package/dist/types/packages/sdk/src/steering-model-selection.d.ts +15 -0
  205. package/dist/types/packages/sdk/src/steering-model-selection.d.ts.map +1 -0
  206. package/dist/types/packages/sdk/src/steering-model-serving.d.ts +8759 -0
  207. package/dist/types/packages/sdk/src/steering-model-serving.d.ts.map +1 -0
  208. package/dist/types/packages/sdk/src/steering-profile-publication.d.ts +7892 -0
  209. package/dist/types/packages/sdk/src/steering-profile-publication.d.ts.map +1 -0
  210. package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts +20 -0
  211. package/dist/types/packages/sdk/src/taskset-draft-package-compiler.d.ts.map +1 -1
  212. package/dist/types/packages/sdk/src/taskset-package-client.d.ts +40 -0
  213. package/dist/types/packages/sdk/src/taskset-package-client.d.ts.map +1 -1
  214. package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts +20 -0
  215. package/dist/types/packages/sdk/src/taskset-package-contracts.d.ts.map +1 -1
  216. package/dist/types/packages/sdk/src/taskset-package-learning.d.ts +20 -0
  217. package/dist/types/packages/sdk/src/taskset-package-learning.d.ts.map +1 -1
  218. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts +10 -0
  219. package/dist/types/packages/sdk/src/taskset-package-projection.d.ts.map +1 -1
  220. package/dist/types/packages/sdk/src/taskset-packages.d.ts +4 -0
  221. package/dist/types/packages/sdk/src/taskset-packages.d.ts.map +1 -1
  222. package/dist/types/packages/sdk/src/tool-learning-local-store.d.ts +2 -0
  223. package/dist/types/packages/sdk/src/tool-learning-local-store.d.ts.map +1 -1
  224. package/dist/types/packages/sdk/src/training-compute-selection.d.ts +186 -1
  225. package/dist/types/packages/sdk/src/training-compute-selection.d.ts.map +1 -1
  226. package/dist/types/packages/sdk/src/training-estimate-workload.d.ts +185 -0
  227. package/dist/types/packages/sdk/src/training-estimate-workload.d.ts.map +1 -0
  228. package/dist/types/packages/sdk/src/training-estimates.d.ts +185 -0
  229. package/dist/types/packages/sdk/src/training-estimates.d.ts.map +1 -1
  230. package/dist/types/packages/sdk/src/training-executions.d.ts +275 -0
  231. package/dist/types/packages/sdk/src/training-executions.d.ts.map +1 -0
  232. package/dist/types/packages/sdk/src/training-experiment-setup.d.ts +5957 -0
  233. package/dist/types/packages/sdk/src/training-experiment-setup.d.ts.map +1 -0
  234. package/dist/types/packages/sdk/src/training-funding.d.ts +153 -0
  235. package/dist/types/packages/sdk/src/training-funding.d.ts.map +1 -0
  236. package/dist/types/packages/sdk/src/training-hardware-catalog.d.ts +155 -0
  237. package/dist/types/packages/sdk/src/training-hardware-catalog.d.ts.map +1 -0
  238. package/dist/types/packages/sdk/src/training-job-contracts.d.ts +1535 -0
  239. package/dist/types/packages/sdk/src/training-job-contracts.d.ts.map +1 -0
  240. package/dist/types/packages/sdk/src/training-learning-batch.d.ts +40 -40
  241. package/dist/types/packages/sdk/src/training-model-save.d.ts +2466 -0
  242. package/dist/types/packages/sdk/src/training-model-save.d.ts.map +1 -0
  243. package/dist/types/packages/sdk/src/training-model-serving-control.d.ts +397 -0
  244. package/dist/types/packages/sdk/src/training-model-serving-control.d.ts.map +1 -0
  245. package/dist/types/packages/sdk/src/training-model-serving.d.ts +2662 -0
  246. package/dist/types/packages/sdk/src/training-model-serving.d.ts.map +1 -0
  247. package/dist/types/packages/sdk/src/training-preparations.d.ts +1001 -0
  248. package/dist/types/packages/sdk/src/training-preparations.d.ts.map +1 -1
  249. package/dist/types/packages/sdk/src/training-qualification-preparation.d.ts +1 -1
  250. package/dist/types/packages/sdk/src/training-qualification-preparation.d.ts.map +1 -1
  251. package/dist/types/packages/sdk/src/training-result.d.ts +4577 -0
  252. package/dist/types/packages/sdk/src/training-result.d.ts.map +1 -0
  253. package/dist/types/packages/sdk/src/training-usage-funding.d.ts +273 -0
  254. package/dist/types/packages/sdk/src/training-usage-funding.d.ts.map +1 -0
  255. package/dist/types/packages/sdk/src/training-usage-status.d.ts +27 -0
  256. package/dist/types/packages/sdk/src/training-usage-status.d.ts.map +1 -0
  257. package/dist/types/packages/sdk/src/training.d.ts +18309 -3682
  258. package/dist/types/packages/sdk/src/training.d.ts.map +1 -1
  259. package/dist/types/packages/sdk/src/weight-experiment-authoring.d.ts +23 -0
  260. package/dist/types/packages/sdk/src/weight-experiment-authoring.d.ts.map +1 -0
  261. package/dist/types/packages/sdk/src/weight-inference.d.ts +155 -0
  262. package/dist/types/packages/sdk/src/weight-inference.d.ts.map +1 -0
  263. package/dist/types/packages/sdk/src/weight-model-versions.d.ts +4578 -0
  264. package/dist/types/packages/sdk/src/weight-model-versions.d.ts.map +1 -0
  265. package/fixtures/python-foundation/activation-reference-workflow.json +6403 -0
  266. package/fixtures/python-foundation/dataset-training-review-http-workflow.json +62 -0
  267. package/fixtures/python-foundation/operation-matrix.json +1410 -220
  268. package/fixtures/python-foundation/schemas.json +59491 -25928
  269. package/fixtures/python-foundation/training-estimate-http-workflow.json +100 -0
  270. package/fixtures/python-foundation/training-funding-http-workflow.json +61 -0
  271. package/fixtures/python-foundation/training-model-save-http-workflow.json +302 -0
  272. package/fixtures/python-foundation/training-model-serving-control-http-workflow.json +1633 -0
  273. package/fixtures/python-foundation/training-model-serving-http-workflow.json +1181 -0
  274. package/fixtures/python-foundation/training-result-http-workflow.json +230 -0
  275. package/package.json +3 -3
  276. package/dist/chunk-47I6LT4X.js.map +0 -1
  277. package/dist/chunk-GJRXJL6G.js +0 -1528
  278. package/dist/chunk-GJRXJL6G.js.map +0 -1
  279. package/dist/chunk-Q4TKI2MV.js.map +0 -1
  280. package/dist/chunk-RLW4Y5ZV.js.map +0 -1
  281. package/dist/chunk-UOV2LEXS.js.map +0 -1
  282. /package/dist/{chunk-TLSP5JKG.js.map → chunk-3BYFS4RO.js.map} +0 -0
  283. /package/dist/{chunk-XRBM6PBD.js.map → chunk-3MDNVNBM.js.map} +0 -0
  284. /package/dist/{chunk-CNREFTAV.js.map → chunk-3VUF5H3B.js.map} +0 -0
  285. /package/dist/{chunk-LHHHJIDR.js.map → chunk-626JLH4D.js.map} +0 -0
  286. /package/dist/{chunk-HAQPGTQ4.js.map → chunk-7F43U2NC.js.map} +0 -0
  287. /package/dist/{chunk-ORYA2G7S.js.map → chunk-7G47YXQT.js.map} +0 -0
  288. /package/dist/{chunk-XMVSQIK4.js.map → chunk-AG6UJ3DI.js.map} +0 -0
  289. /package/dist/{chunk-JBYFD3QS.js.map → chunk-GBDBKGXW.js.map} +0 -0
  290. /package/dist/{chunk-GHPCQXG5.js.map → chunk-GCUWJUUM.js.map} +0 -0
  291. /package/dist/{chunk-C4W2MEFP.js.map → chunk-GS5HEE4M.js.map} +0 -0
  292. /package/dist/{chunk-ATVQQCYN.js.map → chunk-GWXJSBWR.js.map} +0 -0
  293. /package/dist/{chunk-KOJC3TH4.js.map → chunk-OBI2MQYU.js.map} +0 -0
  294. /package/dist/{chunk-JDQVAG3R.js.map → chunk-Q4RGCEOI.js.map} +0 -0
  295. /package/dist/{chunk-YIGFQWZV.js.map → chunk-QIGMNB6M.js.map} +0 -0
  296. /package/dist/{chunk-O3NOGKMT.js.map → chunk-QNOCM5JX.js.map} +0 -0
  297. /package/dist/{chunk-2LVR24GU.js.map → chunk-QOX57Y27.js.map} +0 -0
  298. /package/dist/{chunk-UWY5PUHR.js.map → chunk-RN5MK7NH.js.map} +0 -0
  299. /package/dist/{chunk-RN5G3DQN.js.map → chunk-WM3U4RPZ.js.map} +0 -0
  300. /package/dist/{chunk-K54BDIKL.js.map → chunk-ZQFROKKS.js.map} +0 -0
  301. /package/dist/{chunk-ZYDDHHZZ.js.map → chunk-ZRTNR4U7.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tool-learning-local-store.ts"],"sourcesContent":["import { DatabaseSync } from \"node:sqlite\";\nimport { chmodSync, closeSync, existsSync, lstatSync, mkdirSync, openSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n TOOL_LEARNING_LIMITS,\n ToolEpisodeEventSchema,\n ToolLearningCapturePolicySchema,\n ToolLearningIdSchema,\n toolLearningContentHash,\n assertToolEpisodeCapturePolicy,\n type ToolEpisodeEvent,\n ToolLearningConsultationRequestSchema,\n type ToolLearningConsultationRequest,\n} from \"@openpond/evals/tool-learning\";\nimport { z } from \"zod\";\n\nexport const LocalToolLearningInstallationSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.localToolLearningInstallation.v1\"),\n id: ToolLearningIdSchema,\n teamId: ToolLearningIdSchema,\n projectId: ToolLearningIdSchema,\n client: z.enum([\"claude_code\", \"openpond\"]),\n workspaceRoot: z.string().min(1).max(4000),\n enabled: z.boolean(),\n policy: ToolLearningCapturePolicySchema,\n createdAt: z.iso.datetime({ offset: true }),\n })\n .strict();\nexport type LocalToolLearningInstallation = z.infer<typeof LocalToolLearningInstallationSchema>;\n\n/** Local-only bounded delivery ledger shared by the CLI hooks and native app.\n * The ledger has no authentication, API, training, or tool-execution authority.\n */\nexport class ToolLearningLocalStore {\n private readonly db: DatabaseSync;\n\n constructor(home: string) {\n const directory = join(home, \"tool-learning\");\n if (existsSync(directory) && lstatSync(directory).isSymbolicLink())\n throw new Error(\"tool_learning_directory_symlink_forbidden\");\n mkdirSync(directory, { recursive: true, mode: 0o700 });\n chmodSync(directory, 0o700);\n const filename = join(directory, \"queue.sqlite\");\n if (existsSync(filename)) {\n if (!lstatSync(filename).isFile() || lstatSync(filename).isSymbolicLink())\n throw new Error(\"tool_learning_queue_file_invalid\");\n } else {\n closeSync(openSync(filename, \"wx\", 0o600));\n }\n chmodSync(filename, 0o600);\n this.db = new DatabaseSync(filename);\n this.db.exec(\n \"PRAGMA busy_timeout = 3000; PRAGMA journal_mode = WAL; PRAGMA synchronous = FULL;\",\n );\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS installations (id TEXT PRIMARY KEY, payload TEXT NOT NULL);\n CREATE TABLE IF NOT EXISTS events (\n id TEXT PRIMARY KEY, installation_id TEXT NOT NULL, episode_id TEXT NOT NULL,\n policy_hash TEXT NOT NULL, content_hash TEXT NOT NULL,\n payload TEXT NOT NULL, size_bytes INTEGER NOT NULL, received_at INTEGER NOT NULL\n );\n CREATE INDEX IF NOT EXISTS events_installation ON events(installation_id, received_at, id);\n CREATE INDEX IF NOT EXISTS events_episode ON events(installation_id, episode_id);\n CREATE INDEX IF NOT EXISTS events_policy ON events(installation_id, policy_hash, received_at, id);\n CREATE TABLE IF NOT EXISTS counters (\n installation_id TEXT PRIMARY KEY, dropped INTEGER NOT NULL DEFAULT 0, expired INTEGER NOT NULL DEFAULT 0\n );\n CREATE TABLE IF NOT EXISTS capture_boundaries (\n installation_id TEXT NOT NULL, session_id TEXT NOT NULL, call_id TEXT NOT NULL,\n phase TEXT NOT NULL, payload TEXT NOT NULL, size_bytes INTEGER NOT NULL,\n expires_at INTEGER NOT NULL,\n PRIMARY KEY(installation_id, session_id, call_id, phase)\n );\n CREATE INDEX IF NOT EXISTS capture_boundaries_expiry ON capture_boundaries(expires_at);\n CREATE TABLE IF NOT EXISTS client_observations (\n installation_id TEXT NOT NULL, event_name TEXT NOT NULL,\n observed_at TEXT NOT NULL, count INTEGER NOT NULL,\n PRIMARY KEY(installation_id, event_name)\n );\n CREATE TABLE IF NOT EXISTS consultation_requests (\n installation_id TEXT NOT NULL, operation_id TEXT NOT NULL,\n payload TEXT NOT NULL, size_bytes INTEGER NOT NULL, expires_at INTEGER NOT NULL,\n PRIMARY KEY(installation_id, operation_id)\n );\n CREATE INDEX IF NOT EXISTS consultation_requests_expiry ON consultation_requests(expires_at);\n `);\n this.expireCaptureBoundaries();\n this.db.prepare(\"DELETE FROM consultation_requests WHERE expires_at <= ?\").run(Date.now());\n }\n\n close(): void {\n this.db.close();\n }\n\n /** Short-lived sanitized correlation, not a conversation archive. Stable\n * boundaries survive separate hook processes and lost acknowledgements. */\n captureBoundary(\n installationId: string,\n sessionId: string,\n callId: string,\n phase: \"attempt\" | \"observation\",\n ): ToolEpisodeEvent | null {\n this.expireCaptureBoundaries();\n const row = this.db\n .prepare(\n \"SELECT payload FROM capture_boundaries WHERE installation_id = ? AND session_id = ? AND call_id = ? AND phase = ?\",\n )\n .get(installationId, sessionId, callId, phase);\n if (!row) return null;\n const event = ToolEpisodeEventSchema.parse(JSON.parse(String(row.payload)));\n const installation = this.installation(installationId);\n if (\n !installation?.enabled ||\n event.sanitization.policyHash !== toolLearningContentHash(installation.policy)\n )\n return null;\n return event;\n }\n\n retainCaptureBoundary(value: unknown, now = Date.now()): ToolEpisodeEvent | null {\n const event = ToolEpisodeEventSchema.parse(value);\n if (event.eventKind !== \"attempt\" && event.eventKind !== \"observation\")\n throw new Error(\"tool_learning_capture_boundary_kind\");\n return this.transaction(() => {\n this.expireCaptureBoundaries(now);\n const installation = this.installation(event.installationId);\n if (!installation?.enabled) return null;\n assertToolEpisodeCapturePolicy(event, installation.policy);\n const previous = this.captureBoundary(\n event.installationId,\n event.sessionId,\n event.callId,\n event.eventKind,\n );\n if (previous) return previous;\n const payload = JSON.stringify(event),\n size = Buffer.byteLength(payload);\n const total = this.retainedUsage();\n const scoped = this.retainedUsage(installation.id);\n if (\n Number(total.count) >= TOOL_LEARNING_LIMITS.queueEvents ||\n Number(scoped.count) >= installation.policy.maximumQueueEvents ||\n Number(scoped.bytes) + size > installation.policy.maximumQueueBytes ||\n Number(total.bytes) + size > TOOL_LEARNING_LIMITS.queueBytes\n ) {\n this.recordDropped(event.installationId);\n return null;\n }\n this.db\n .prepare(\"INSERT INTO capture_boundaries VALUES (?, ?, ?, ?, ?, ?, ?)\")\n .run(\n event.installationId,\n event.sessionId,\n event.callId,\n event.eventKind,\n payload,\n size,\n now + installation.policy.maximumQueueAgeSeconds * 1000,\n );\n return event;\n });\n }\n\n recordDropped(installationId: string): void {\n this.db\n .prepare(\n \"INSERT INTO counters(installation_id, dropped) VALUES (?, 1) ON CONFLICT(installation_id) DO UPDATE SET dropped = dropped + 1\",\n )\n .run(installationId);\n }\n\n recordClientObservation(installationId: string, name: string): void {\n if (\n ![\"start\", \"resume\", \"compact\", \"turn_context\", \"pre_tool\", \"post_tool\", \"failure\"].includes(\n name,\n )\n )\n throw new Error(\"tool_learning_unknown_client_observation\");\n if (!this.installation(installationId)?.enabled) return;\n this.db\n .prepare(\n \"INSERT INTO client_observations VALUES (?, ?, ?, 1) ON CONFLICT(installation_id, event_name) DO UPDATE SET observed_at = excluded.observed_at, count = count + 1\",\n )\n .run(installationId, name, new Date().toISOString());\n }\n\n /** Keep bounded follow-up evidence after a failure so success sampling does\n * not discard a possible recovery. This is not a verified recovery link. */\n hasRecoveryCandidateContext(installationId: string, sessionId: string, now = Date.now()) {\n const rows = this.db\n .prepare(\n \"SELECT payload FROM capture_boundaries WHERE installation_id = ? AND session_id = ? AND phase = 'observation' AND expires_at > ? ORDER BY json_extract(payload, '$.occurredAt') DESC LIMIT 33\",\n )\n .all(installationId, sessionId, now) as Array<{ payload: string }>;\n return rows.slice(0, 32).some((row) => {\n const event = ToolEpisodeEventSchema.parse(JSON.parse(row.payload));\n return (\n event.eventKind === \"observation\" &&\n event.payload.outcome === \"failed\" &&\n Date.parse(event.occurredAt) >= now - 600000\n );\n });\n }\n\n clientObservations(installationId: string) {\n return this.db\n .prepare(\n \"SELECT event_name AS event, observed_at AS observedAt, count FROM client_observations WHERE installation_id = ? ORDER BY event_name\",\n )\n .all(installationId);\n }\n\n consultationRequest(\n installationId: string,\n operationId: string,\n ): ToolLearningConsultationRequest | null {\n this.db.prepare(\"DELETE FROM consultation_requests WHERE expires_at <= ?\").run(Date.now());\n const row = this.db\n .prepare(\n \"SELECT payload FROM consultation_requests WHERE installation_id = ? AND operation_id = ?\",\n )\n .get(installationId, operationId);\n return row\n ? ToolLearningConsultationRequestSchema.parse(JSON.parse(String(row.payload)))\n : null;\n }\n\n consultationForCall(installationId: string, sessionId: string, callId: string) {\n this.db.prepare(\"DELETE FROM consultation_requests WHERE expires_at <= ?\").run(Date.now());\n const row = this.db\n .prepare(\n \"SELECT payload FROM consultation_requests WHERE installation_id = ? AND json_extract(payload, '$.sessionId') = ? AND json_extract(payload, '$.callId') = ? ORDER BY expires_at DESC LIMIT 1\",\n )\n .get(installationId, sessionId, callId);\n return row\n ? ToolLearningConsultationRequestSchema.parse(JSON.parse(String(row.payload)))\n : null;\n }\n\n retainConsultationRequest(value: unknown): ToolLearningConsultationRequest {\n const request = ToolLearningConsultationRequestSchema.parse(value);\n return this.transaction(() => {\n const previous = this.consultationRequest(request.installationId, request.operationId);\n if (previous) {\n if (toolLearningContentHash(previous) !== toolLearningContentHash(request))\n throw new Error(\"tool_learning_consultation_identity_conflict\");\n return previous;\n }\n const installation = this.installation(request.installationId);\n if (\n !installation?.enabled ||\n installation.teamId !== request.scope.teamId ||\n installation.projectId !== request.scope.projectId ||\n !installation.policy.purposes.includes(\"consultation\")\n )\n throw new Error(\"tool_learning_consultation_disabled\");\n const payload = JSON.stringify(request),\n bytes = Buffer.byteLength(payload);\n const total = this.retainedUsage();\n const scoped = this.retainedUsage(installation.id);\n if (\n Number(total.count) >= TOOL_LEARNING_LIMITS.queueEvents ||\n Number(scoped.count) >= installation.policy.maximumQueueEvents ||\n Number(scoped.bytes) + bytes > installation.policy.maximumQueueBytes ||\n Number(total.bytes) + bytes > TOOL_LEARNING_LIMITS.queueBytes\n )\n throw new Error(\"tool_learning_consultation_capacity_reached\");\n this.db\n .prepare(\"INSERT INTO consultation_requests VALUES (?, ?, ?, ?, ?)\")\n .run(\n request.installationId,\n request.operationId,\n payload,\n bytes,\n Date.now() + installation.policy.maximumQueueAgeSeconds * 1000,\n );\n return request;\n });\n }\n\n private retainedUsage(installationId?: string) {\n const suffix = installationId === undefined ? \"\" : \" WHERE installation_id = ?\";\n const query = `SELECT COUNT(*) AS count, COALESCE(SUM(size_bytes), 0) AS bytes FROM (SELECT installation_id, size_bytes FROM events UNION ALL SELECT installation_id, size_bytes FROM capture_boundaries UNION ALL SELECT installation_id, size_bytes FROM consultation_requests)${suffix}`;\n return installationId === undefined\n ? this.db.prepare(query).get()!\n : this.db.prepare(query).get(installationId)!;\n }\n\n private expireCaptureBoundaries(now = Date.now()): void {\n this.db.prepare(\"DELETE FROM capture_boundaries WHERE expires_at <= ?\").run(now);\n }\n\n installation(id: string): LocalToolLearningInstallation | null {\n const row = this.db.prepare(\"SELECT payload FROM installations WHERE id = ?\").get(id);\n return row ? LocalToolLearningInstallationSchema.parse(JSON.parse(String(row.payload))) : null;\n }\n\n installations(): LocalToolLearningInstallation[] {\n return this.db\n .prepare(\"SELECT payload FROM installations ORDER BY id\")\n .all()\n .map((row) => LocalToolLearningInstallationSchema.parse(JSON.parse(String(row.payload))));\n }\n\n configure(value: unknown): LocalToolLearningInstallation {\n const installation = LocalToolLearningInstallationSchema.parse(value);\n this.transaction(() => {\n const previous = this.installation(installation.id);\n if (\n previous &&\n [\"teamId\", \"projectId\", \"client\", \"workspaceRoot\"].some(\n (key) =>\n previous[key as keyof LocalToolLearningInstallation] !==\n installation[key as keyof LocalToolLearningInstallation],\n )\n )\n throw new Error(\"tool_learning_installation_scope_immutable\");\n if (\n previous &&\n (installation.policy.revision < previous.policy.revision ||\n (installation.policy.revision === previous.policy.revision &&\n toolLearningContentHash(installation.policy) !==\n toolLearningContentHash(previous.policy)))\n )\n throw new Error(\"tool_learning_capture_policy_revision_conflict\");\n this.db\n .prepare(\n \"INSERT INTO installations VALUES (?, ?) ON CONFLICT(id) DO UPDATE SET payload = excluded.payload\",\n )\n .run(installation.id, JSON.stringify(installation));\n });\n return installation;\n }\n\n append(\n value: unknown,\n now = Date.now(),\n ): \"retained\" | \"already_retained\" | \"disabled\" | \"expired\" | \"queue_full\" {\n const event = ToolEpisodeEventSchema.parse(value);\n const payload = JSON.stringify(event),\n bytes = Buffer.byteLength(payload);\n return this.transaction(() => {\n const installation = this.installation(event.installationId);\n if (!installation?.enabled) return \"disabled\";\n const policy = installation.policy;\n if (!policy.purposes.includes(\"capture\")) return \"disabled\";\n assertToolEpisodeCapturePolicy(event, policy);\n const previous = this.db\n .prepare(\"SELECT content_hash, installation_id FROM events WHERE id = ?\")\n .get(event.eventId);\n if (previous) {\n if (\n previous.content_hash !== event.contentHash ||\n previous.installation_id !== event.installationId\n )\n throw new Error(\"tool_learning_event_identity_conflict\");\n return \"already_retained\";\n }\n this.db\n .prepare(\"INSERT INTO counters(installation_id) VALUES (?) ON CONFLICT DO NOTHING\")\n .run(installation.id);\n const cutoff = now - policy.maximumQueueAgeSeconds * 1000;\n const expired = this.db\n .prepare(\"DELETE FROM events WHERE installation_id = ? AND received_at < ?\")\n .run(installation.id, cutoff).changes;\n this.db\n .prepare(\"UPDATE counters SET expired = expired + ? WHERE installation_id = ?\")\n .run(expired, installation.id);\n if (Date.parse(event.occurredAt) < cutoff || Date.parse(event.occurredAt) > now + 300_000) {\n this.db\n .prepare(\"UPDATE counters SET expired = expired + 1 WHERE installation_id = ?\")\n .run(installation.id);\n return \"expired\";\n }\n // A home-wide ceiling also bounds many separately configured installations.\n const total = this.retainedUsage();\n const scoped = this.retainedUsage(installation.id);\n const episode = this.db\n .prepare(\n \"SELECT COUNT(*) AS count, COALESCE(SUM(size_bytes), 0) AS bytes FROM events WHERE installation_id = ? AND episode_id = ?\",\n )\n .get(installation.id, event.episodeId)!;\n if (\n Number(total.count) >= TOOL_LEARNING_LIMITS.queueEvents ||\n Number(total.bytes) + bytes > TOOL_LEARNING_LIMITS.queueBytes ||\n Number(scoped.count) >= policy.maximumQueueEvents ||\n Number(scoped.bytes) + bytes > policy.maximumQueueBytes ||\n Number(episode.count) >= policy.maximumEpisodeEvents ||\n Number(episode.bytes) + bytes > policy.maximumEpisodeBytes\n ) {\n this.db\n .prepare(\"UPDATE counters SET dropped = dropped + 1 WHERE installation_id = ?\")\n .run(installation.id);\n return \"queue_full\";\n }\n this.db\n .prepare(\"INSERT INTO events VALUES (?, ?, ?, ?, ?, ?, ?, ?)\")\n .run(\n event.eventId,\n installation.id,\n event.episodeId,\n event.sanitization.policyHash,\n event.contentHash,\n payload,\n bytes,\n now,\n );\n return \"retained\";\n });\n }\n\n pending(\n installationId: string,\n limit: number = TOOL_LEARNING_LIMITS.eventsPerAppend,\n ): ToolEpisodeEvent[] {\n if (!Number.isInteger(limit) || limit < 1 || limit > TOOL_LEARNING_LIMITS.eventsPerAppend)\n throw new Error(\"tool_learning_queue_page_limit\");\n this.expire(installationId);\n const installation = this.installation(installationId);\n if (!installation?.enabled || !installation.policy.purposes.includes(\"capture\")) return [];\n return this.db\n .prepare(\n \"SELECT payload FROM events WHERE installation_id = ? AND policy_hash = ? ORDER BY received_at, id LIMIT ?\",\n )\n .all(installationId, toolLearningContentHash(installation.policy), limit)\n .map((row) => ToolEpisodeEventSchema.parse(JSON.parse(String(row.payload))));\n }\n\n acknowledge(\n installationId: string,\n accepted: Array<{\n eventId: string;\n contentHash: string;\n state?: \"retained\" | \"already_retained\" | \"privacy_rejected\";\n }>,\n ): void {\n if (accepted.length > TOOL_LEARNING_LIMITS.eventsPerAppend)\n throw new Error(\"tool_learning_ack_limit\");\n this.transaction(() => {\n for (const event of accepted) {\n const removed = this.db\n .prepare(\"DELETE FROM events WHERE installation_id = ? AND id = ? AND content_hash = ?\")\n .run(installationId, event.eventId, event.contentHash);\n if (event.state === \"privacy_rejected\" && Number(removed.changes) > 0)\n this.db\n .prepare(\n \"INSERT INTO counters(installation_id, dropped) VALUES (?, ?) ON CONFLICT(installation_id) DO UPDATE SET dropped = dropped + excluded.dropped\",\n )\n .run(installationId, removed.changes);\n }\n });\n }\n\n status(installationId: string) {\n this.expire(installationId);\n const installation = this.installation(installationId);\n const pending = this.db\n .prepare(\n \"SELECT COUNT(*) AS events, COALESCE(SUM(size_bytes), 0) AS bytes FROM events WHERE installation_id = ?\",\n )\n .get(installationId)!;\n const counter = this.db\n .prepare(\"SELECT dropped, expired FROM counters WHERE installation_id = ?\")\n .get(installationId);\n const deliverable =\n installation?.enabled && installation.policy.purposes.includes(\"capture\")\n ? Number(\n this.db\n .prepare(\n \"SELECT COUNT(*) AS count FROM events WHERE installation_id = ? AND policy_hash = ?\",\n )\n .get(installationId, toolLearningContentHash(installation.policy))!.count,\n )\n : 0;\n return {\n pendingEvents: Number(pending.events),\n pendingBytes: Number(pending.bytes),\n droppedEvents: Number(counter?.dropped ?? 0),\n expiredEvents: Number(counter?.expired ?? 0),\n blockedByPolicyEvents: Number(pending.events) - deliverable,\n };\n }\n\n private transaction<T>(operation: () => T): T {\n this.db.exec(\"BEGIN IMMEDIATE\");\n try {\n const result = operation();\n this.db.exec(\"COMMIT\");\n return result;\n } catch (error) {\n this.db.exec(\"ROLLBACK\");\n throw error;\n }\n }\n\n private expire(installationId: string): void {\n const installation = this.installation(installationId);\n if (!installation) return;\n this.transaction(() => {\n const expired = this.db\n .prepare(\"DELETE FROM events WHERE installation_id = ? AND received_at < ?\")\n .run(\n installationId,\n Date.now() - installation.policy.maximumQueueAgeSeconds * 1000,\n ).changes;\n this.db\n .prepare(\n \"INSERT INTO counters(installation_id, expired) VALUES (?, ?) ON CONFLICT(installation_id) DO UPDATE SET expired = expired + excluded.expired\",\n )\n .run(installationId, expired);\n });\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/tool-learning-local-store.ts"],"sourcesContent":["import { DatabaseSync } from \"node:sqlite\";\nimport { chmodSync, closeSync, existsSync, lstatSync, mkdirSync, openSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n TOOL_LEARNING_LIMITS,\n ToolEpisodeEventSchema,\n ToolLearningCapturePolicySchema,\n ToolLearningIdSchema,\n ToolLearningClientSchema,\n toolLearningContentHash,\n assertToolEpisodeCapturePolicy,\n type ToolEpisodeEvent,\n ToolLearningConsultationRequestSchema,\n type ToolLearningConsultationRequest,\n} from \"@openpond/evals/tool-learning\";\nimport { z } from \"zod\";\n\nexport const LocalToolLearningInstallationSchema = z\n .object({\n schemaVersion: z.literal(\"openpond.localToolLearningInstallation.v1\"),\n id: ToolLearningIdSchema,\n teamId: ToolLearningIdSchema,\n projectId: ToolLearningIdSchema,\n client: ToolLearningClientSchema,\n workspaceRoot: z.string().min(1).max(4000),\n enabled: z.boolean(),\n policy: ToolLearningCapturePolicySchema,\n createdAt: z.iso.datetime({ offset: true }),\n })\n .strict();\nexport type LocalToolLearningInstallation = z.infer<typeof LocalToolLearningInstallationSchema>;\n\n/** Local-only bounded delivery ledger shared by the CLI hooks and native app.\n * The ledger has no authentication, API, training, or tool-execution authority.\n */\nexport class ToolLearningLocalStore {\n private readonly db: DatabaseSync;\n\n constructor(home: string) {\n const directory = join(home, \"tool-learning\");\n if (existsSync(directory) && lstatSync(directory).isSymbolicLink())\n throw new Error(\"tool_learning_directory_symlink_forbidden\");\n mkdirSync(directory, { recursive: true, mode: 0o700 });\n chmodSync(directory, 0o700);\n const filename = join(directory, \"queue.sqlite\");\n if (existsSync(filename)) {\n if (!lstatSync(filename).isFile() || lstatSync(filename).isSymbolicLink())\n throw new Error(\"tool_learning_queue_file_invalid\");\n } else {\n closeSync(openSync(filename, \"wx\", 0o600));\n }\n chmodSync(filename, 0o600);\n this.db = new DatabaseSync(filename);\n this.db.exec(\n \"PRAGMA busy_timeout = 3000; PRAGMA journal_mode = WAL; PRAGMA synchronous = FULL;\",\n );\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS installations (id TEXT PRIMARY KEY, payload TEXT NOT NULL);\n CREATE TABLE IF NOT EXISTS events (\n id TEXT PRIMARY KEY, installation_id TEXT NOT NULL, episode_id TEXT NOT NULL,\n policy_hash TEXT NOT NULL, content_hash TEXT NOT NULL,\n payload TEXT NOT NULL, size_bytes INTEGER NOT NULL, received_at INTEGER NOT NULL\n );\n CREATE INDEX IF NOT EXISTS events_installation ON events(installation_id, received_at, id);\n CREATE INDEX IF NOT EXISTS events_episode ON events(installation_id, episode_id);\n CREATE INDEX IF NOT EXISTS events_policy ON events(installation_id, policy_hash, received_at, id);\n CREATE TABLE IF NOT EXISTS counters (\n installation_id TEXT PRIMARY KEY, dropped INTEGER NOT NULL DEFAULT 0, expired INTEGER NOT NULL DEFAULT 0\n );\n CREATE TABLE IF NOT EXISTS capture_boundaries (\n installation_id TEXT NOT NULL, session_id TEXT NOT NULL, call_id TEXT NOT NULL,\n phase TEXT NOT NULL, payload TEXT NOT NULL, size_bytes INTEGER NOT NULL,\n expires_at INTEGER NOT NULL,\n PRIMARY KEY(installation_id, session_id, call_id, phase)\n );\n CREATE INDEX IF NOT EXISTS capture_boundaries_expiry ON capture_boundaries(expires_at);\n CREATE TABLE IF NOT EXISTS client_observations (\n installation_id TEXT NOT NULL, event_name TEXT NOT NULL,\n observed_at TEXT NOT NULL, count INTEGER NOT NULL,\n PRIMARY KEY(installation_id, event_name)\n );\n CREATE TABLE IF NOT EXISTS consultation_requests (\n installation_id TEXT NOT NULL, operation_id TEXT NOT NULL,\n payload TEXT NOT NULL, size_bytes INTEGER NOT NULL, expires_at INTEGER NOT NULL,\n PRIMARY KEY(installation_id, operation_id)\n );\n CREATE INDEX IF NOT EXISTS consultation_requests_expiry ON consultation_requests(expires_at);\n `);\n this.expireCaptureBoundaries();\n this.db.prepare(\"DELETE FROM consultation_requests WHERE expires_at <= ?\").run(Date.now());\n }\n\n close(): void {\n this.db.close();\n }\n\n /** Short-lived sanitized correlation, not a conversation archive. Stable\n * boundaries survive separate hook processes and lost acknowledgements. */\n captureBoundary(\n installationId: string,\n sessionId: string,\n callId: string,\n phase: \"attempt\" | \"observation\",\n ): ToolEpisodeEvent | null {\n this.expireCaptureBoundaries();\n const row = this.db\n .prepare(\n \"SELECT payload FROM capture_boundaries WHERE installation_id = ? AND session_id = ? AND call_id = ? AND phase = ?\",\n )\n .get(installationId, sessionId, callId, phase);\n if (!row) return null;\n const event = ToolEpisodeEventSchema.parse(JSON.parse(String(row.payload)));\n const installation = this.installation(installationId);\n if (\n !installation?.enabled ||\n event.sanitization.policyHash !== toolLearningContentHash(installation.policy)\n )\n return null;\n return event;\n }\n\n retainCaptureBoundary(value: unknown, now = Date.now()): ToolEpisodeEvent | null {\n const event = ToolEpisodeEventSchema.parse(value);\n if (event.eventKind !== \"attempt\" && event.eventKind !== \"observation\")\n throw new Error(\"tool_learning_capture_boundary_kind\");\n return this.transaction(() => {\n this.expireCaptureBoundaries(now);\n const installation = this.installation(event.installationId);\n if (!installation?.enabled) return null;\n assertToolEpisodeCapturePolicy(event, installation.policy);\n const previous = this.captureBoundary(\n event.installationId,\n event.sessionId,\n event.callId,\n event.eventKind,\n );\n if (previous) return previous;\n const payload = JSON.stringify(event),\n size = Buffer.byteLength(payload);\n const total = this.retainedUsage();\n const scoped = this.retainedUsage(installation.id);\n if (\n Number(total.count) >= TOOL_LEARNING_LIMITS.queueEvents ||\n Number(scoped.count) >= installation.policy.maximumQueueEvents ||\n Number(scoped.bytes) + size > installation.policy.maximumQueueBytes ||\n Number(total.bytes) + size > TOOL_LEARNING_LIMITS.queueBytes\n ) {\n this.recordDropped(event.installationId);\n return null;\n }\n this.db\n .prepare(\"INSERT INTO capture_boundaries VALUES (?, ?, ?, ?, ?, ?, ?)\")\n .run(\n event.installationId,\n event.sessionId,\n event.callId,\n event.eventKind,\n payload,\n size,\n now + installation.policy.maximumQueueAgeSeconds * 1000,\n );\n return event;\n });\n }\n\n recordDropped(installationId: string): void {\n this.db\n .prepare(\n \"INSERT INTO counters(installation_id, dropped) VALUES (?, 1) ON CONFLICT(installation_id) DO UPDATE SET dropped = dropped + 1\",\n )\n .run(installationId);\n }\n\n recordClientObservation(installationId: string, name: string): void {\n if (\n ![\"start\", \"resume\", \"compact\", \"turn_context\", \"pre_tool\", \"post_tool\", \"failure\"].includes(\n name,\n )\n )\n throw new Error(\"tool_learning_unknown_client_observation\");\n if (!this.installation(installationId)?.enabled) return;\n this.db\n .prepare(\n \"INSERT INTO client_observations VALUES (?, ?, ?, 1) ON CONFLICT(installation_id, event_name) DO UPDATE SET observed_at = excluded.observed_at, count = count + 1\",\n )\n .run(installationId, name, new Date().toISOString());\n }\n\n /** Keep bounded follow-up evidence after a failure so success sampling does\n * not discard a possible recovery. This is not a verified recovery link. */\n hasRecoveryCandidateContext(installationId: string, sessionId: string, now = Date.now()) {\n const rows = this.db\n .prepare(\n \"SELECT payload FROM capture_boundaries WHERE installation_id = ? AND session_id = ? AND phase = 'observation' AND expires_at > ? ORDER BY json_extract(payload, '$.occurredAt') DESC LIMIT 33\",\n )\n .all(installationId, sessionId, now) as Array<{ payload: string }>;\n return rows.slice(0, 32).some((row) => {\n const event = ToolEpisodeEventSchema.parse(JSON.parse(row.payload));\n return (\n event.eventKind === \"observation\" &&\n event.payload.outcome === \"failed\" &&\n Date.parse(event.occurredAt) >= now - 600000\n );\n });\n }\n\n clientObservations(installationId: string) {\n return this.db\n .prepare(\n \"SELECT event_name AS event, observed_at AS observedAt, count FROM client_observations WHERE installation_id = ? ORDER BY event_name\",\n )\n .all(installationId);\n }\n\n consultationRequest(\n installationId: string,\n operationId: string,\n ): ToolLearningConsultationRequest | null {\n this.db.prepare(\"DELETE FROM consultation_requests WHERE expires_at <= ?\").run(Date.now());\n const row = this.db\n .prepare(\n \"SELECT payload FROM consultation_requests WHERE installation_id = ? AND operation_id = ?\",\n )\n .get(installationId, operationId);\n return row\n ? ToolLearningConsultationRequestSchema.parse(JSON.parse(String(row.payload)))\n : null;\n }\n\n consultationForCall(installationId: string, sessionId: string, callId: string) {\n this.db.prepare(\"DELETE FROM consultation_requests WHERE expires_at <= ?\").run(Date.now());\n const row = this.db\n .prepare(\n \"SELECT payload FROM consultation_requests WHERE installation_id = ? AND json_extract(payload, '$.sessionId') = ? AND json_extract(payload, '$.callId') = ? ORDER BY expires_at DESC LIMIT 1\",\n )\n .get(installationId, sessionId, callId);\n return row\n ? ToolLearningConsultationRequestSchema.parse(JSON.parse(String(row.payload)))\n : null;\n }\n\n retainConsultationRequest(value: unknown): ToolLearningConsultationRequest {\n const request = ToolLearningConsultationRequestSchema.parse(value);\n return this.transaction(() => {\n const previous = this.consultationRequest(request.installationId, request.operationId);\n if (previous) {\n if (toolLearningContentHash(previous) !== toolLearningContentHash(request))\n throw new Error(\"tool_learning_consultation_identity_conflict\");\n return previous;\n }\n const installation = this.installation(request.installationId);\n if (\n !installation?.enabled ||\n installation.teamId !== request.scope.teamId ||\n installation.projectId !== request.scope.projectId ||\n !installation.policy.purposes.includes(\"consultation\")\n )\n throw new Error(\"tool_learning_consultation_disabled\");\n const payload = JSON.stringify(request),\n bytes = Buffer.byteLength(payload);\n const total = this.retainedUsage();\n const scoped = this.retainedUsage(installation.id);\n if (\n Number(total.count) >= TOOL_LEARNING_LIMITS.queueEvents ||\n Number(scoped.count) >= installation.policy.maximumQueueEvents ||\n Number(scoped.bytes) + bytes > installation.policy.maximumQueueBytes ||\n Number(total.bytes) + bytes > TOOL_LEARNING_LIMITS.queueBytes\n )\n throw new Error(\"tool_learning_consultation_capacity_reached\");\n this.db\n .prepare(\"INSERT INTO consultation_requests VALUES (?, ?, ?, ?, ?)\")\n .run(\n request.installationId,\n request.operationId,\n payload,\n bytes,\n Date.now() + installation.policy.maximumQueueAgeSeconds * 1000,\n );\n return request;\n });\n }\n\n private retainedUsage(installationId?: string) {\n const suffix = installationId === undefined ? \"\" : \" WHERE installation_id = ?\";\n const query = `SELECT COUNT(*) AS count, COALESCE(SUM(size_bytes), 0) AS bytes FROM (SELECT installation_id, size_bytes FROM events UNION ALL SELECT installation_id, size_bytes FROM capture_boundaries UNION ALL SELECT installation_id, size_bytes FROM consultation_requests)${suffix}`;\n return installationId === undefined\n ? this.db.prepare(query).get()!\n : this.db.prepare(query).get(installationId)!;\n }\n\n private expireCaptureBoundaries(now = Date.now()): void {\n this.db.prepare(\"DELETE FROM capture_boundaries WHERE expires_at <= ?\").run(now);\n }\n\n installation(id: string): LocalToolLearningInstallation | null {\n const row = this.db.prepare(\"SELECT payload FROM installations WHERE id = ?\").get(id);\n return row ? LocalToolLearningInstallationSchema.parse(JSON.parse(String(row.payload))) : null;\n }\n\n installations(): LocalToolLearningInstallation[] {\n return this.db\n .prepare(\"SELECT payload FROM installations ORDER BY id\")\n .all()\n .map((row) => LocalToolLearningInstallationSchema.parse(JSON.parse(String(row.payload))));\n }\n\n configure(value: unknown): LocalToolLearningInstallation {\n const installation = LocalToolLearningInstallationSchema.parse(value);\n this.transaction(() => {\n const previous = this.installation(installation.id);\n if (\n previous &&\n [\"teamId\", \"projectId\", \"client\", \"workspaceRoot\"].some(\n (key) =>\n previous[key as keyof LocalToolLearningInstallation] !==\n installation[key as keyof LocalToolLearningInstallation],\n )\n )\n throw new Error(\"tool_learning_installation_scope_immutable\");\n if (\n previous &&\n (installation.policy.revision < previous.policy.revision ||\n (installation.policy.revision === previous.policy.revision &&\n toolLearningContentHash(installation.policy) !==\n toolLearningContentHash(previous.policy)))\n )\n throw new Error(\"tool_learning_capture_policy_revision_conflict\");\n this.db\n .prepare(\n \"INSERT INTO installations VALUES (?, ?) ON CONFLICT(id) DO UPDATE SET payload = excluded.payload\",\n )\n .run(installation.id, JSON.stringify(installation));\n });\n return installation;\n }\n\n append(\n value: unknown,\n now = Date.now(),\n ): \"retained\" | \"already_retained\" | \"disabled\" | \"expired\" | \"queue_full\" {\n const event = ToolEpisodeEventSchema.parse(value);\n const payload = JSON.stringify(event),\n bytes = Buffer.byteLength(payload);\n return this.transaction(() => {\n const installation = this.installation(event.installationId);\n if (!installation?.enabled) return \"disabled\";\n const policy = installation.policy;\n if (!policy.purposes.includes(\"capture\")) return \"disabled\";\n assertToolEpisodeCapturePolicy(event, policy);\n const previous = this.db\n .prepare(\"SELECT content_hash, installation_id FROM events WHERE id = ?\")\n .get(event.eventId);\n if (previous) {\n if (\n previous.content_hash !== event.contentHash ||\n previous.installation_id !== event.installationId\n )\n throw new Error(\"tool_learning_event_identity_conflict\");\n return \"already_retained\";\n }\n this.db\n .prepare(\"INSERT INTO counters(installation_id) VALUES (?) ON CONFLICT DO NOTHING\")\n .run(installation.id);\n const cutoff = now - policy.maximumQueueAgeSeconds * 1000;\n const expired = this.db\n .prepare(\"DELETE FROM events WHERE installation_id = ? AND received_at < ?\")\n .run(installation.id, cutoff).changes;\n this.db\n .prepare(\"UPDATE counters SET expired = expired + ? WHERE installation_id = ?\")\n .run(expired, installation.id);\n if (Date.parse(event.occurredAt) < cutoff || Date.parse(event.occurredAt) > now + 300_000) {\n this.db\n .prepare(\"UPDATE counters SET expired = expired + 1 WHERE installation_id = ?\")\n .run(installation.id);\n return \"expired\";\n }\n // A home-wide ceiling also bounds many separately configured installations.\n const total = this.retainedUsage();\n const scoped = this.retainedUsage(installation.id);\n const episode = this.db\n .prepare(\n \"SELECT COUNT(*) AS count, COALESCE(SUM(size_bytes), 0) AS bytes FROM events WHERE installation_id = ? AND episode_id = ?\",\n )\n .get(installation.id, event.episodeId)!;\n if (\n Number(total.count) >= TOOL_LEARNING_LIMITS.queueEvents ||\n Number(total.bytes) + bytes > TOOL_LEARNING_LIMITS.queueBytes ||\n Number(scoped.count) >= policy.maximumQueueEvents ||\n Number(scoped.bytes) + bytes > policy.maximumQueueBytes ||\n Number(episode.count) >= policy.maximumEpisodeEvents ||\n Number(episode.bytes) + bytes > policy.maximumEpisodeBytes\n ) {\n this.db\n .prepare(\"UPDATE counters SET dropped = dropped + 1 WHERE installation_id = ?\")\n .run(installation.id);\n return \"queue_full\";\n }\n this.db\n .prepare(\"INSERT INTO events VALUES (?, ?, ?, ?, ?, ?, ?, ?)\")\n .run(\n event.eventId,\n installation.id,\n event.episodeId,\n event.sanitization.policyHash,\n event.contentHash,\n payload,\n bytes,\n now,\n );\n return \"retained\";\n });\n }\n\n pending(\n installationId: string,\n limit: number = TOOL_LEARNING_LIMITS.eventsPerAppend,\n ): ToolEpisodeEvent[] {\n if (!Number.isInteger(limit) || limit < 1 || limit > TOOL_LEARNING_LIMITS.eventsPerAppend)\n throw new Error(\"tool_learning_queue_page_limit\");\n this.expire(installationId);\n const installation = this.installation(installationId);\n if (!installation?.enabled || !installation.policy.purposes.includes(\"capture\")) return [];\n return this.db\n .prepare(\n \"SELECT payload FROM events WHERE installation_id = ? AND policy_hash = ? ORDER BY received_at, id LIMIT ?\",\n )\n .all(installationId, toolLearningContentHash(installation.policy), limit)\n .map((row) => ToolEpisodeEventSchema.parse(JSON.parse(String(row.payload))));\n }\n\n acknowledge(\n installationId: string,\n accepted: Array<{\n eventId: string;\n contentHash: string;\n state?: \"retained\" | \"already_retained\" | \"privacy_rejected\";\n }>,\n ): void {\n if (accepted.length > TOOL_LEARNING_LIMITS.eventsPerAppend)\n throw new Error(\"tool_learning_ack_limit\");\n this.transaction(() => {\n for (const event of accepted) {\n const removed = this.db\n .prepare(\"DELETE FROM events WHERE installation_id = ? AND id = ? AND content_hash = ?\")\n .run(installationId, event.eventId, event.contentHash);\n if (event.state === \"privacy_rejected\" && Number(removed.changes) > 0)\n this.db\n .prepare(\n \"INSERT INTO counters(installation_id, dropped) VALUES (?, ?) ON CONFLICT(installation_id) DO UPDATE SET dropped = dropped + excluded.dropped\",\n )\n .run(installationId, removed.changes);\n }\n });\n }\n\n status(installationId: string) {\n this.expire(installationId);\n const installation = this.installation(installationId);\n const pending = this.db\n .prepare(\n \"SELECT COUNT(*) AS events, COALESCE(SUM(size_bytes), 0) AS bytes FROM events WHERE installation_id = ?\",\n )\n .get(installationId)!;\n const counter = this.db\n .prepare(\"SELECT dropped, expired FROM counters WHERE installation_id = ?\")\n .get(installationId);\n const deliverable =\n installation?.enabled && installation.policy.purposes.includes(\"capture\")\n ? Number(\n this.db\n .prepare(\n \"SELECT COUNT(*) AS count FROM events WHERE installation_id = ? AND policy_hash = ?\",\n )\n .get(installationId, toolLearningContentHash(installation.policy))!.count,\n )\n : 0;\n return {\n pendingEvents: Number(pending.events),\n pendingBytes: Number(pending.bytes),\n droppedEvents: Number(counter?.dropped ?? 0),\n expiredEvents: Number(counter?.expired ?? 0),\n blockedByPolicyEvents: Number(pending.events) - deliverable,\n };\n }\n\n private transaction<T>(operation: () => T): T {\n this.db.exec(\"BEGIN IMMEDIATE\");\n try {\n const result = operation();\n this.db.exec(\"COMMIT\");\n return result;\n } catch (error) {\n this.db.exec(\"ROLLBACK\");\n throw error;\n }\n }\n\n private expire(installationId: string): void {\n const installation = this.installation(installationId);\n if (!installation) return;\n this.transaction(() => {\n const expired = this.db\n .prepare(\"DELETE FROM events WHERE installation_id = ? AND received_at < ?\")\n .run(\n installationId,\n Date.now() - installation.policy.maximumQueueAgeSeconds * 1000,\n ).changes;\n this.db\n .prepare(\n \"INSERT INTO counters(installation_id, expired) VALUES (?, ?) ON CONFLICT(installation_id) DO UPDATE SET expired = expired + excluded.expired\",\n )\n .run(installationId, expired);\n });\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,24 +1,4 @@
1
1
  import {
2
- prepareImportedTasksetPackage,
3
- projectLearningBatchGraders
4
- } from "./chunk-JBYFD3QS.js";
5
- import {
6
- projectPortableTaskRecord,
7
- resolvePortableTasksetRewardExecution
8
- } from "./chunk-ATVQQCYN.js";
9
- import {
10
- TasksetDraftOutputContractSchema,
11
- TasksetSchema,
12
- computeTasksetHash
13
- } from "./chunk-GHPCQXG5.js";
14
- import {
15
- LearningBatchDatasetSourceRefSchema,
16
- MAX_TASKSET_PACKAGE_BYTES,
17
- decodeTasksetPackageFile,
18
- validateTasksetPackage
19
- } from "./chunk-IFBCLRBM.js";
20
- import {
21
- ManagedSftRecipeSchema,
22
2
  TRAINING_EVALUATION_SOURCE_PATH,
23
3
  TrainingCapabilitiesSchema,
24
4
  TrainingEvaluationSourceSchema,
@@ -30,28 +10,49 @@ import {
30
10
  trainingEvaluationSourceRef,
31
11
  trainingInputArtifactUploadHash,
32
12
  trainingJobSubmissionHash
33
- } from "./chunk-GJRXJL6G.js";
34
- import "./chunk-EZME7DV4.js";
35
- import "./chunk-GX6KMHW2.js";
36
- import "./chunk-TK3DXH7A.js";
37
- import "./chunk-H3367ISL.js";
13
+ } from "./chunk-EBB36D5X.js";
14
+ import {
15
+ ManagedSftRecipeSchema
16
+ } from "./chunk-UVQENVTW.js";
38
17
  import {
39
18
  TrainingHandoffOriginSchema
40
- } from "./chunk-7BYLH47N.js";
41
- import "./chunk-K54BDIKL.js";
19
+ } from "./chunk-VPK3SM45.js";
42
20
  import {
43
21
  HarnessSourceSelectionSchema,
44
22
  createAgentSnapshot,
45
23
  createHarnessRelease,
46
24
  validateHarnessPolicySourcePackage,
47
25
  validateHarnessSourcePackage
48
- } from "./chunk-Q4TKI2MV.js";
49
- import "./chunk-C4W2MEFP.js";
50
- import "./chunk-ZYDDHHZZ.js";
51
- import "./chunk-RLW4Y5ZV.js";
26
+ } from "./chunk-774OWTCD.js";
27
+ import {
28
+ prepareImportedTasksetPackage,
29
+ projectLearningBatchGraders
30
+ } from "./chunk-GBDBKGXW.js";
31
+ import {
32
+ projectPortableTaskRecord,
33
+ resolvePortableTasksetRewardExecution
34
+ } from "./chunk-GWXJSBWR.js";
35
+ import {
36
+ TasksetDraftOutputContractSchema,
37
+ TasksetSchema,
38
+ computeTasksetHash
39
+ } from "./chunk-GCUWJUUM.js";
40
+ import {
41
+ LearningBatchDatasetSourceRefSchema,
42
+ MAX_TASKSET_PACKAGE_BYTES,
43
+ decodeTasksetPackageFile,
44
+ validateTasksetPackage
45
+ } from "./chunk-ZQ6QTYRE.js";
46
+ import "./chunk-TK3DXH7A.js";
47
+ import "./chunk-H3367ISL.js";
48
+ import "./chunk-ZQFROKKS.js";
49
+ import "./chunk-QTNYXOJW.js";
50
+ import "./chunk-GS5HEE4M.js";
51
+ import "./chunk-ZRTNR4U7.js";
52
+ import "./chunk-JMFYNIYZ.js";
52
53
  import {
53
54
  TrainingGpuSelectionSchema
54
- } from "./chunk-UOV2LEXS.js";
55
+ } from "./chunk-MVAEE5EI.js";
55
56
  import "./chunk-CL3IOOVL.js";
56
57
  import "./chunk-B3ZHJ2KK.js";
57
58
  import {