langwatch 0.34.0 → 0.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (774) hide show
  1. package/dist/{chunk-RIPASL56.mjs → chunk-2O4ILSP5.mjs} +2 -2
  2. package/dist/{chunk-2V5FBEY3.mjs → chunk-3QHURXIZ.mjs} +42 -5
  3. package/dist/chunk-3QHURXIZ.mjs.map +1 -0
  4. package/dist/{chunk-FSACIXYG.js → chunk-53AMPF5E.js} +16 -22
  5. package/dist/chunk-53AMPF5E.js.map +1 -0
  6. package/dist/{chunk-YKWXS2BM.js → chunk-EDWIKCYX.js} +130 -48
  7. package/dist/chunk-EDWIKCYX.js.map +1 -0
  8. package/dist/{chunk-QZRBNYW2.js → chunk-HBVGKWJK.js} +53 -16
  9. package/dist/chunk-HBVGKWJK.js.map +1 -0
  10. package/dist/{chunk-NTRV2ICJ.js → chunk-IUSLT65Z.js} +2 -2
  11. package/dist/{chunk-NTRV2ICJ.js.map → chunk-IUSLT65Z.js.map} +1 -1
  12. package/dist/{chunk-4ZA6WF6S.mjs → chunk-KH2GOLFO.mjs} +104 -22
  13. package/dist/chunk-KH2GOLFO.mjs.map +1 -0
  14. package/dist/{chunk-PONU4KJX.mjs → chunk-L5KBRKHS.mjs} +110 -5
  15. package/dist/chunk-L5KBRKHS.mjs.map +1 -0
  16. package/dist/chunk-TKSTXX3D.js +239 -0
  17. package/dist/chunk-TKSTXX3D.js.map +1 -0
  18. package/dist/{chunk-42EDFIG2.mjs → chunk-XMAFHMLS.mjs} +10 -16
  19. package/dist/{chunk-42EDFIG2.mjs.map → chunk-XMAFHMLS.mjs.map} +1 -1
  20. package/dist/cli/bundle.js +3768 -0
  21. package/dist/cli/index.js +10 -1335
  22. package/dist/{implementation-BIfcyP32.d.ts → implementation-CMWs8g5L.d.ts} +3 -3
  23. package/dist/{implementation-BBG46scL.d.mts → implementation-Cv1hPZBQ.d.mts} +3 -3
  24. package/dist/index.d.mts +125 -12
  25. package/dist/index.d.ts +125 -12
  26. package/dist/index.js +4840 -1410
  27. package/dist/index.js.map +1 -1
  28. package/dist/index.mjs +4788 -1358
  29. package/dist/index.mjs.map +1 -1
  30. package/dist/observability-sdk/index.d.mts +6 -6
  31. package/dist/observability-sdk/index.d.ts +6 -6
  32. package/dist/observability-sdk/index.js +5 -10
  33. package/dist/observability-sdk/index.js.map +1 -1
  34. package/dist/observability-sdk/index.mjs +5 -10
  35. package/dist/observability-sdk/instrumentation/langchain/index.d.mts +2 -2
  36. package/dist/observability-sdk/instrumentation/langchain/index.d.ts +2 -2
  37. package/dist/observability-sdk/instrumentation/langchain/index.js +18 -21
  38. package/dist/observability-sdk/instrumentation/langchain/index.js.map +1 -1
  39. package/dist/observability-sdk/instrumentation/langchain/index.mjs +3 -6
  40. package/dist/observability-sdk/instrumentation/langchain/index.mjs.map +1 -1
  41. package/dist/observability-sdk/setup/node/index.d.mts +2 -2
  42. package/dist/observability-sdk/setup/node/index.d.ts +2 -2
  43. package/dist/observability-sdk/setup/node/index.js +4 -8
  44. package/dist/observability-sdk/setup/node/index.js.map +1 -1
  45. package/dist/observability-sdk/setup/node/index.mjs +3 -7
  46. package/dist/{types-CYfKDbKj.d.ts → types-D-yAkWoC.d.ts} +71 -3
  47. package/dist/{types-Dmazk5Bk.d.mts → types-DLfhJb38.d.mts} +1 -1
  48. package/dist/{types-Dmazk5Bk.d.ts → types-DLfhJb38.d.ts} +1 -1
  49. package/dist/{types-BvCQH8F1.d.ts → types-VOZv9LYO.d.mts} +1 -1
  50. package/dist/{types-BvCQH8F1.d.mts → types-VOZv9LYO.d.ts} +1 -1
  51. package/dist/{types-fzTtg5sg.d.mts → types-bfBzGB7S.d.mts} +71 -3
  52. package/package.json +13 -6
  53. package/dist/add-TFE2BH4K.mjs +0 -148
  54. package/dist/add-TFE2BH4K.mjs.map +0 -1
  55. package/dist/add-URBA6FGV.js +0 -148
  56. package/dist/add-URBA6FGV.js.map +0 -1
  57. package/dist/archive-CL6XUEYU.mjs +0 -41
  58. package/dist/archive-CL6XUEYU.mjs.map +0 -1
  59. package/dist/archive-K4SSNBML.js +0 -41
  60. package/dist/archive-K4SSNBML.js.map +0 -1
  61. package/dist/assign-4PVKU4WO.mjs +0 -54
  62. package/dist/assign-4PVKU4WO.mjs.map +0 -1
  63. package/dist/assign-RFENMUXO.js +0 -54
  64. package/dist/assign-RFENMUXO.js.map +0 -1
  65. package/dist/chunk-2MITUTNI.js +0 -205
  66. package/dist/chunk-2MITUTNI.js.map +0 -1
  67. package/dist/chunk-2V5FBEY3.mjs.map +0 -1
  68. package/dist/chunk-2VVANTLB.js +0 -68
  69. package/dist/chunk-2VVANTLB.js.map +0 -1
  70. package/dist/chunk-377U47MY.js +0 -42
  71. package/dist/chunk-377U47MY.js.map +0 -1
  72. package/dist/chunk-3K6C35HN.mjs +0 -80
  73. package/dist/chunk-3K6C35HN.mjs.map +0 -1
  74. package/dist/chunk-3PZ5VO5T.mjs +0 -205
  75. package/dist/chunk-3PZ5VO5T.mjs.map +0 -1
  76. package/dist/chunk-4Q4HSAKZ.js +0 -894
  77. package/dist/chunk-4Q4HSAKZ.js.map +0 -1
  78. package/dist/chunk-4ZA6WF6S.mjs.map +0 -1
  79. package/dist/chunk-535JT5M3.mjs +0 -42
  80. package/dist/chunk-535JT5M3.mjs.map +0 -1
  81. package/dist/chunk-5M6GLAIG.js +0 -410
  82. package/dist/chunk-5M6GLAIG.js.map +0 -1
  83. package/dist/chunk-5PF32BLZ.mjs +0 -76
  84. package/dist/chunk-5PF32BLZ.mjs.map +0 -1
  85. package/dist/chunk-5W4B44MH.mjs +0 -103
  86. package/dist/chunk-5W4B44MH.mjs.map +0 -1
  87. package/dist/chunk-5Z3A3Z5M.mjs +0 -96
  88. package/dist/chunk-5Z3A3Z5M.mjs.map +0 -1
  89. package/dist/chunk-64H4FLDB.mjs +0 -51
  90. package/dist/chunk-64H4FLDB.mjs.map +0 -1
  91. package/dist/chunk-67PP4GB4.mjs +0 -40
  92. package/dist/chunk-67PP4GB4.mjs.map +0 -1
  93. package/dist/chunk-6KMX34ZH.js +0 -257
  94. package/dist/chunk-6KMX34ZH.js.map +0 -1
  95. package/dist/chunk-6RSHYGUB.js +0 -85
  96. package/dist/chunk-6RSHYGUB.js.map +0 -1
  97. package/dist/chunk-7HFW67OR.mjs +0 -63
  98. package/dist/chunk-7HFW67OR.mjs.map +0 -1
  99. package/dist/chunk-7KSBRJUY.js +0 -54
  100. package/dist/chunk-7KSBRJUY.js.map +0 -1
  101. package/dist/chunk-7ULZZHBP.mjs +0 -42
  102. package/dist/chunk-7ULZZHBP.mjs.map +0 -1
  103. package/dist/chunk-A6YWANGL.js +0 -103
  104. package/dist/chunk-A6YWANGL.js.map +0 -1
  105. package/dist/chunk-B5TBCV6N.js +0 -96
  106. package/dist/chunk-B5TBCV6N.js.map +0 -1
  107. package/dist/chunk-BAX4W3AY.mjs +0 -62
  108. package/dist/chunk-BAX4W3AY.mjs.map +0 -1
  109. package/dist/chunk-BGYXA2QV.mjs +0 -96
  110. package/dist/chunk-BGYXA2QV.mjs.map +0 -1
  111. package/dist/chunk-BRPEG3YQ.js +0 -62
  112. package/dist/chunk-BRPEG3YQ.js.map +0 -1
  113. package/dist/chunk-C5Y772G7.js +0 -152
  114. package/dist/chunk-C5Y772G7.js.map +0 -1
  115. package/dist/chunk-CEJY6QI3.mjs +0 -508
  116. package/dist/chunk-CEJY6QI3.mjs.map +0 -1
  117. package/dist/chunk-CGECDLSE.js +0 -90
  118. package/dist/chunk-CGECDLSE.js.map +0 -1
  119. package/dist/chunk-CKTJADY6.mjs +0 -348
  120. package/dist/chunk-CKTJADY6.mjs.map +0 -1
  121. package/dist/chunk-CLYXJJ6C.js +0 -66
  122. package/dist/chunk-CLYXJJ6C.js.map +0 -1
  123. package/dist/chunk-COMOCQA6.mjs +0 -13
  124. package/dist/chunk-COMOCQA6.mjs.map +0 -1
  125. package/dist/chunk-D2VRKNFF.js +0 -1672
  126. package/dist/chunk-D2VRKNFF.js.map +0 -1
  127. package/dist/chunk-D5NUUB4G.mjs +0 -225
  128. package/dist/chunk-D5NUUB4G.mjs.map +0 -1
  129. package/dist/chunk-DCTJDRBW.js +0 -40
  130. package/dist/chunk-DCTJDRBW.js.map +0 -1
  131. package/dist/chunk-DIILEB4J.js +0 -196
  132. package/dist/chunk-DIILEB4J.js.map +0 -1
  133. package/dist/chunk-DOJBPYAE.js +0 -663
  134. package/dist/chunk-DOJBPYAE.js.map +0 -1
  135. package/dist/chunk-DTEKJ3UD.mjs +0 -66
  136. package/dist/chunk-DTEKJ3UD.mjs.map +0 -1
  137. package/dist/chunk-FG3JQBJB.mjs +0 -68
  138. package/dist/chunk-FG3JQBJB.mjs.map +0 -1
  139. package/dist/chunk-FNFLZXXA.js +0 -80
  140. package/dist/chunk-FNFLZXXA.js.map +0 -1
  141. package/dist/chunk-FSACIXYG.js.map +0 -1
  142. package/dist/chunk-GFLV5NP6.mjs +0 -70
  143. package/dist/chunk-GFLV5NP6.mjs.map +0 -1
  144. package/dist/chunk-GNWMKXDU.mjs +0 -66
  145. package/dist/chunk-GNWMKXDU.mjs.map +0 -1
  146. package/dist/chunk-GPGJNBPP.js +0 -63
  147. package/dist/chunk-GPGJNBPP.js.map +0 -1
  148. package/dist/chunk-GUPNZDU7.js +0 -101
  149. package/dist/chunk-GUPNZDU7.js.map +0 -1
  150. package/dist/chunk-HDA25KWZ.js +0 -134
  151. package/dist/chunk-HDA25KWZ.js.map +0 -1
  152. package/dist/chunk-IZD5CIVE.js +0 -70
  153. package/dist/chunk-IZD5CIVE.js.map +0 -1
  154. package/dist/chunk-J3KM7ZO7.mjs +0 -152
  155. package/dist/chunk-J3KM7ZO7.mjs.map +0 -1
  156. package/dist/chunk-JQVI5CD7.mjs +0 -894
  157. package/dist/chunk-JQVI5CD7.mjs.map +0 -1
  158. package/dist/chunk-JSV75WAY.js +0 -76
  159. package/dist/chunk-JSV75WAY.js.map +0 -1
  160. package/dist/chunk-JZYHVNJR.js +0 -22
  161. package/dist/chunk-JZYHVNJR.js.map +0 -1
  162. package/dist/chunk-KT6HZNPV.js +0 -36
  163. package/dist/chunk-KT6HZNPV.js.map +0 -1
  164. package/dist/chunk-KW2W5KVS.mjs +0 -22
  165. package/dist/chunk-KW2W5KVS.mjs.map +0 -1
  166. package/dist/chunk-LA5LU5UP.js +0 -225
  167. package/dist/chunk-LA5LU5UP.js.map +0 -1
  168. package/dist/chunk-LSRJHTPL.js +0 -36
  169. package/dist/chunk-LSRJHTPL.js.map +0 -1
  170. package/dist/chunk-M3WJZUOE.js +0 -13
  171. package/dist/chunk-M3WJZUOE.js.map +0 -1
  172. package/dist/chunk-M5UNTGGK.mjs +0 -68
  173. package/dist/chunk-M5UNTGGK.mjs.map +0 -1
  174. package/dist/chunk-NQN42A2N.js +0 -348
  175. package/dist/chunk-NQN42A2N.js.map +0 -1
  176. package/dist/chunk-NYCKS3GG.js +0 -20
  177. package/dist/chunk-NYCKS3GG.js.map +0 -1
  178. package/dist/chunk-O2GHYEAE.mjs +0 -92
  179. package/dist/chunk-O2GHYEAE.mjs.map +0 -1
  180. package/dist/chunk-OGAE7BVQ.js +0 -67
  181. package/dist/chunk-OGAE7BVQ.js.map +0 -1
  182. package/dist/chunk-OMOZEGVZ.mjs +0 -22
  183. package/dist/chunk-OMOZEGVZ.mjs.map +0 -1
  184. package/dist/chunk-OMZ3FRPU.mjs +0 -65
  185. package/dist/chunk-OMZ3FRPU.mjs.map +0 -1
  186. package/dist/chunk-OOXU4LFW.js +0 -65
  187. package/dist/chunk-OOXU4LFW.js.map +0 -1
  188. package/dist/chunk-OSAFGMGH.mjs +0 -85
  189. package/dist/chunk-OSAFGMGH.mjs.map +0 -1
  190. package/dist/chunk-OXULVOBF.mjs +0 -144
  191. package/dist/chunk-OXULVOBF.mjs.map +0 -1
  192. package/dist/chunk-PONU4KJX.mjs.map +0 -1
  193. package/dist/chunk-PQA46YVG.mjs +0 -410
  194. package/dist/chunk-PQA46YVG.mjs.map +0 -1
  195. package/dist/chunk-Q6OMYVNW.js +0 -66
  196. package/dist/chunk-Q6OMYVNW.js.map +0 -1
  197. package/dist/chunk-Q7AHHFC3.mjs +0 -20
  198. package/dist/chunk-Q7AHHFC3.mjs.map +0 -1
  199. package/dist/chunk-QSMGACTW.js +0 -51
  200. package/dist/chunk-QSMGACTW.js.map +0 -1
  201. package/dist/chunk-QVQ7WDJS.mjs +0 -196
  202. package/dist/chunk-QVQ7WDJS.mjs.map +0 -1
  203. package/dist/chunk-QZRBNYW2.js.map +0 -1
  204. package/dist/chunk-R6QPBFZD.mjs +0 -63
  205. package/dist/chunk-R6QPBFZD.mjs.map +0 -1
  206. package/dist/chunk-RALJR5ZU.js +0 -80
  207. package/dist/chunk-RALJR5ZU.js.map +0 -1
  208. package/dist/chunk-S2UWK4HL.mjs +0 -36
  209. package/dist/chunk-S2UWK4HL.mjs.map +0 -1
  210. package/dist/chunk-SIXSSID3.mjs +0 -43
  211. package/dist/chunk-SIXSSID3.mjs.map +0 -1
  212. package/dist/chunk-SNKGSX5I.js +0 -42
  213. package/dist/chunk-SNKGSX5I.js.map +0 -1
  214. package/dist/chunk-SQXVLXIS.mjs +0 -90
  215. package/dist/chunk-SQXVLXIS.mjs.map +0 -1
  216. package/dist/chunk-TIAQGDR2.js +0 -34
  217. package/dist/chunk-TIAQGDR2.js.map +0 -1
  218. package/dist/chunk-U47MQ6CS.mjs +0 -67
  219. package/dist/chunk-U47MQ6CS.mjs.map +0 -1
  220. package/dist/chunk-UQ633TEF.mjs +0 -54
  221. package/dist/chunk-UQ633TEF.mjs.map +0 -1
  222. package/dist/chunk-UTXV7U7Z.js +0 -92
  223. package/dist/chunk-UTXV7U7Z.js.map +0 -1
  224. package/dist/chunk-W2BNKVWJ.mjs +0 -36
  225. package/dist/chunk-W2BNKVWJ.mjs.map +0 -1
  226. package/dist/chunk-WG7MPZXJ.mjs +0 -663
  227. package/dist/chunk-WG7MPZXJ.mjs.map +0 -1
  228. package/dist/chunk-WIXX2IDN.mjs +0 -101
  229. package/dist/chunk-WIXX2IDN.mjs.map +0 -1
  230. package/dist/chunk-WQRATXQU.mjs +0 -80
  231. package/dist/chunk-WQRATXQU.mjs.map +0 -1
  232. package/dist/chunk-WV4U2PPY.js +0 -68
  233. package/dist/chunk-WV4U2PPY.js.map +0 -1
  234. package/dist/chunk-WZTRPR6A.js +0 -43
  235. package/dist/chunk-WZTRPR6A.js.map +0 -1
  236. package/dist/chunk-XGULH63G.mjs +0 -1672
  237. package/dist/chunk-XGULH63G.mjs.map +0 -1
  238. package/dist/chunk-YBLYQYXL.js +0 -22
  239. package/dist/chunk-YBLYQYXL.js.map +0 -1
  240. package/dist/chunk-YK55ZGRQ.mjs +0 -257
  241. package/dist/chunk-YK55ZGRQ.mjs.map +0 -1
  242. package/dist/chunk-YKDTIJF2.js +0 -144
  243. package/dist/chunk-YKDTIJF2.js.map +0 -1
  244. package/dist/chunk-YKWXS2BM.js.map +0 -1
  245. package/dist/chunk-YOSDU6PV.mjs +0 -34
  246. package/dist/chunk-YOSDU6PV.mjs.map +0 -1
  247. package/dist/chunk-YP4LDCP6.mjs +0 -277
  248. package/dist/chunk-YP4LDCP6.mjs.map +0 -1
  249. package/dist/chunk-ZA5BH7IZ.js +0 -277
  250. package/dist/chunk-ZA5BH7IZ.js.map +0 -1
  251. package/dist/chunk-ZFAAOZZM.js +0 -96
  252. package/dist/chunk-ZFAAOZZM.js.map +0 -1
  253. package/dist/chunk-ZFFJYYDN.js +0 -508
  254. package/dist/chunk-ZFFJYYDN.js.map +0 -1
  255. package/dist/chunk-ZX6VUKK5.js +0 -63
  256. package/dist/chunk-ZX6VUKK5.js.map +0 -1
  257. package/dist/cli/index.d.mts +0 -1
  258. package/dist/cli/index.d.ts +0 -1
  259. package/dist/cli/index.js.map +0 -1
  260. package/dist/cli/index.mjs +0 -1336
  261. package/dist/cli/index.mjs.map +0 -1
  262. package/dist/config-DPFYZQUU.js +0 -96
  263. package/dist/config-DPFYZQUU.js.map +0 -1
  264. package/dist/config-DXWUTPTA.mjs +0 -96
  265. package/dist/config-DXWUTPTA.mjs.map +0 -1
  266. package/dist/create-2MUVHIRR.js +0 -49
  267. package/dist/create-2MUVHIRR.js.map +0 -1
  268. package/dist/create-2VO6N4CY.js +0 -50
  269. package/dist/create-2VO6N4CY.js.map +0 -1
  270. package/dist/create-5HLREIKR.mjs +0 -52
  271. package/dist/create-5HLREIKR.mjs.map +0 -1
  272. package/dist/create-7WWQNO2D.mjs +0 -88
  273. package/dist/create-7WWQNO2D.mjs.map +0 -1
  274. package/dist/create-APC6WMHS.js +0 -72
  275. package/dist/create-APC6WMHS.js.map +0 -1
  276. package/dist/create-B6AZP3AH.js +0 -42
  277. package/dist/create-B6AZP3AH.js.map +0 -1
  278. package/dist/create-BWIIJPYN.js +0 -88
  279. package/dist/create-BWIIJPYN.js.map +0 -1
  280. package/dist/create-C7HS7DAN.js +0 -91
  281. package/dist/create-C7HS7DAN.js.map +0 -1
  282. package/dist/create-CENOO2Z5.mjs +0 -94
  283. package/dist/create-CENOO2Z5.mjs.map +0 -1
  284. package/dist/create-CSENTPZ7.mjs +0 -88
  285. package/dist/create-CSENTPZ7.mjs.map +0 -1
  286. package/dist/create-F564PPYR.mjs +0 -72
  287. package/dist/create-F564PPYR.mjs.map +0 -1
  288. package/dist/create-FEVRMAGI.js +0 -75
  289. package/dist/create-FEVRMAGI.js.map +0 -1
  290. package/dist/create-FK6ZCXCA.js +0 -92
  291. package/dist/create-FK6ZCXCA.js.map +0 -1
  292. package/dist/create-G5KF3LVC.mjs +0 -50
  293. package/dist/create-G5KF3LVC.mjs.map +0 -1
  294. package/dist/create-HL6BPJBM.mjs +0 -71
  295. package/dist/create-HL6BPJBM.mjs.map +0 -1
  296. package/dist/create-KFDWNSGC.mjs +0 -87
  297. package/dist/create-KFDWNSGC.mjs.map +0 -1
  298. package/dist/create-KTPZZ7NV.mjs +0 -75
  299. package/dist/create-KTPZZ7NV.mjs.map +0 -1
  300. package/dist/create-LAKPCRNY.mjs +0 -92
  301. package/dist/create-LAKPCRNY.mjs.map +0 -1
  302. package/dist/create-LFU7Z6DS.mjs +0 -42
  303. package/dist/create-LFU7Z6DS.mjs.map +0 -1
  304. package/dist/create-MI7MQLN6.mjs +0 -48
  305. package/dist/create-MI7MQLN6.mjs.map +0 -1
  306. package/dist/create-OMO3TETI.mjs +0 -23
  307. package/dist/create-OMO3TETI.mjs.map +0 -1
  308. package/dist/create-OWODQWNJ.js +0 -48
  309. package/dist/create-OWODQWNJ.js.map +0 -1
  310. package/dist/create-POGAVC3B.mjs +0 -49
  311. package/dist/create-POGAVC3B.mjs.map +0 -1
  312. package/dist/create-QJLKTHQ6.mjs +0 -58
  313. package/dist/create-QJLKTHQ6.mjs.map +0 -1
  314. package/dist/create-R57TZY3Y.js +0 -94
  315. package/dist/create-R57TZY3Y.js.map +0 -1
  316. package/dist/create-RIHQJENZ.js +0 -71
  317. package/dist/create-RIHQJENZ.js.map +0 -1
  318. package/dist/create-UOIUDY25.js +0 -88
  319. package/dist/create-UOIUDY25.js.map +0 -1
  320. package/dist/create-URUJVBUC.js +0 -87
  321. package/dist/create-URUJVBUC.js.map +0 -1
  322. package/dist/create-VEK55UDK.mjs +0 -43
  323. package/dist/create-VEK55UDK.mjs.map +0 -1
  324. package/dist/create-VKXRDN5O.js +0 -52
  325. package/dist/create-VKXRDN5O.js.map +0 -1
  326. package/dist/create-XHAKNOTS.mjs +0 -91
  327. package/dist/create-XHAKNOTS.mjs.map +0 -1
  328. package/dist/create-YJHDG2ZO.js +0 -23
  329. package/dist/create-YJHDG2ZO.js.map +0 -1
  330. package/dist/create-Z5CM76ZW.js +0 -43
  331. package/dist/create-Z5CM76ZW.js.map +0 -1
  332. package/dist/create-Z6JTQNL6.js +0 -58
  333. package/dist/create-Z6JTQNL6.js.map +0 -1
  334. package/dist/delete-6BINMYZI.mjs +0 -52
  335. package/dist/delete-6BINMYZI.mjs.map +0 -1
  336. package/dist/delete-6T5CCDFJ.js +0 -42
  337. package/dist/delete-6T5CCDFJ.js.map +0 -1
  338. package/dist/delete-6UHWYVNZ.js +0 -52
  339. package/dist/delete-6UHWYVNZ.js.map +0 -1
  340. package/dist/delete-A5RWDQKJ.js +0 -52
  341. package/dist/delete-A5RWDQKJ.js.map +0 -1
  342. package/dist/delete-A7ZWGQPR.mjs +0 -59
  343. package/dist/delete-A7ZWGQPR.mjs.map +0 -1
  344. package/dist/delete-B5G7GAHY.mjs +0 -44
  345. package/dist/delete-B5G7GAHY.mjs.map +0 -1
  346. package/dist/delete-BGCVEG3C.js +0 -61
  347. package/dist/delete-BGCVEG3C.js.map +0 -1
  348. package/dist/delete-BYCIZOZG.js +0 -39
  349. package/dist/delete-BYCIZOZG.js.map +0 -1
  350. package/dist/delete-E5VYCRYX.mjs +0 -39
  351. package/dist/delete-E5VYCRYX.mjs.map +0 -1
  352. package/dist/delete-EK6PUMYW.js +0 -52
  353. package/dist/delete-EK6PUMYW.js.map +0 -1
  354. package/dist/delete-ERB4LGWZ.mjs +0 -41
  355. package/dist/delete-ERB4LGWZ.mjs.map +0 -1
  356. package/dist/delete-FD3IISGJ.js +0 -38
  357. package/dist/delete-FD3IISGJ.js.map +0 -1
  358. package/dist/delete-FE3MRFPM.mjs +0 -52
  359. package/dist/delete-FE3MRFPM.mjs.map +0 -1
  360. package/dist/delete-FP5MMDDA.mjs +0 -61
  361. package/dist/delete-FP5MMDDA.mjs.map +0 -1
  362. package/dist/delete-FWKI62NT.mjs +0 -39
  363. package/dist/delete-FWKI62NT.mjs.map +0 -1
  364. package/dist/delete-HLKQDPTI.js +0 -52
  365. package/dist/delete-HLKQDPTI.js.map +0 -1
  366. package/dist/delete-KAVDMRQX.mjs +0 -59
  367. package/dist/delete-KAVDMRQX.mjs.map +0 -1
  368. package/dist/delete-M4ZCKWOU.mjs +0 -52
  369. package/dist/delete-M4ZCKWOU.mjs.map +0 -1
  370. package/dist/delete-NGPOOTEX.mjs +0 -42
  371. package/dist/delete-NGPOOTEX.mjs.map +0 -1
  372. package/dist/delete-NN4CSTK5.js +0 -44
  373. package/dist/delete-NN4CSTK5.js.map +0 -1
  374. package/dist/delete-NRW5THMB.js +0 -39
  375. package/dist/delete-NRW5THMB.js.map +0 -1
  376. package/dist/delete-SZG6DJUR.mjs +0 -52
  377. package/dist/delete-SZG6DJUR.mjs.map +0 -1
  378. package/dist/delete-UMDNW3RR.mjs +0 -59
  379. package/dist/delete-UMDNW3RR.mjs.map +0 -1
  380. package/dist/delete-UVGITJ2L.mjs +0 -38
  381. package/dist/delete-UVGITJ2L.mjs.map +0 -1
  382. package/dist/delete-VBP7TKUH.js +0 -41
  383. package/dist/delete-VBP7TKUH.js.map +0 -1
  384. package/dist/delete-Y3DTH336.js +0 -59
  385. package/dist/delete-Y3DTH336.js.map +0 -1
  386. package/dist/delete-ZM3GFW2Z.js +0 -59
  387. package/dist/delete-ZM3GFW2Z.js.map +0 -1
  388. package/dist/delete-ZSN6PWGA.js +0 -59
  389. package/dist/delete-ZSN6PWGA.js.map +0 -1
  390. package/dist/docs-23TMQCLZ.js +0 -77
  391. package/dist/docs-23TMQCLZ.js.map +0 -1
  392. package/dist/docs-YG2DQVHD.mjs +0 -77
  393. package/dist/docs-YG2DQVHD.mjs.map +0 -1
  394. package/dist/download-B4Z4TAXZ.js +0 -100
  395. package/dist/download-B4Z4TAXZ.js.map +0 -1
  396. package/dist/download-JPL3BO4H.mjs +0 -100
  397. package/dist/download-JPL3BO4H.mjs.map +0 -1
  398. package/dist/duplicate-IYUSDPY2.js +0 -45
  399. package/dist/duplicate-IYUSDPY2.js.map +0 -1
  400. package/dist/duplicate-OWG7P745.mjs +0 -45
  401. package/dist/duplicate-OWG7P745.mjs.map +0 -1
  402. package/dist/export-4A6ILAPM.mjs +0 -103
  403. package/dist/export-4A6ILAPM.mjs.map +0 -1
  404. package/dist/export-BUFJDFWC.js +0 -103
  405. package/dist/export-BUFJDFWC.js.map +0 -1
  406. package/dist/get-37E7GAV3.js +0 -76
  407. package/dist/get-37E7GAV3.js.map +0 -1
  408. package/dist/get-4D2MVW4T.js +0 -49
  409. package/dist/get-4D2MVW4T.js.map +0 -1
  410. package/dist/get-576OERBE.mjs +0 -66
  411. package/dist/get-576OERBE.mjs.map +0 -1
  412. package/dist/get-5GQP5EDN.mjs +0 -71
  413. package/dist/get-5GQP5EDN.mjs.map +0 -1
  414. package/dist/get-6DKM4MZL.mjs +0 -70
  415. package/dist/get-6DKM4MZL.mjs.map +0 -1
  416. package/dist/get-BO7KWXNS.js +0 -70
  417. package/dist/get-BO7KWXNS.js.map +0 -1
  418. package/dist/get-BQH2FJBV.mjs +0 -49
  419. package/dist/get-BQH2FJBV.mjs.map +0 -1
  420. package/dist/get-DCEQN75Y.mjs +0 -71
  421. package/dist/get-DCEQN75Y.mjs.map +0 -1
  422. package/dist/get-DEFHJ7CN.js +0 -94
  423. package/dist/get-DEFHJ7CN.js.map +0 -1
  424. package/dist/get-DX5U344V.mjs +0 -149
  425. package/dist/get-DX5U344V.mjs.map +0 -1
  426. package/dist/get-EWYM6FYK.js +0 -54
  427. package/dist/get-EWYM6FYK.js.map +0 -1
  428. package/dist/get-HY3N72VT.js +0 -71
  429. package/dist/get-HY3N72VT.js.map +0 -1
  430. package/dist/get-I2CSBUKB.js +0 -56
  431. package/dist/get-I2CSBUKB.js.map +0 -1
  432. package/dist/get-I6EY4PC6.mjs +0 -54
  433. package/dist/get-I6EY4PC6.mjs.map +0 -1
  434. package/dist/get-JDHZ2YUC.mjs +0 -85
  435. package/dist/get-JDHZ2YUC.mjs.map +0 -1
  436. package/dist/get-KSATLDNX.mjs +0 -56
  437. package/dist/get-KSATLDNX.mjs.map +0 -1
  438. package/dist/get-L5HUN5CE.mjs +0 -94
  439. package/dist/get-L5HUN5CE.mjs.map +0 -1
  440. package/dist/get-LIQYXM3J.mjs +0 -76
  441. package/dist/get-LIQYXM3J.mjs.map +0 -1
  442. package/dist/get-NICBHRKG.js +0 -51
  443. package/dist/get-NICBHRKG.js.map +0 -1
  444. package/dist/get-NXV4JPXT.mjs +0 -51
  445. package/dist/get-NXV4JPXT.mjs.map +0 -1
  446. package/dist/get-OH6XFEO7.js +0 -149
  447. package/dist/get-OH6XFEO7.js.map +0 -1
  448. package/dist/get-OW77HE3C.mjs +0 -67
  449. package/dist/get-OW77HE3C.mjs.map +0 -1
  450. package/dist/get-P5MUOCUP.js +0 -68
  451. package/dist/get-P5MUOCUP.js.map +0 -1
  452. package/dist/get-PHEE7JVL.mjs +0 -71
  453. package/dist/get-PHEE7JVL.mjs.map +0 -1
  454. package/dist/get-QYIM3DCN.mjs +0 -68
  455. package/dist/get-QYIM3DCN.mjs.map +0 -1
  456. package/dist/get-R6F56IVZ.js +0 -67
  457. package/dist/get-R6F56IVZ.js.map +0 -1
  458. package/dist/get-RWF3UWIF.js +0 -71
  459. package/dist/get-RWF3UWIF.js.map +0 -1
  460. package/dist/get-T6TAL2GB.js +0 -52
  461. package/dist/get-T6TAL2GB.js.map +0 -1
  462. package/dist/get-TNDPILF3.js +0 -85
  463. package/dist/get-TNDPILF3.js.map +0 -1
  464. package/dist/get-UV3YT4VH.js +0 -66
  465. package/dist/get-UV3YT4VH.js.map +0 -1
  466. package/dist/get-X4Q4RZQC.mjs +0 -52
  467. package/dist/get-X4Q4RZQC.mjs.map +0 -1
  468. package/dist/get-XIK4FEGG.js +0 -71
  469. package/dist/get-XIK4FEGG.js.map +0 -1
  470. package/dist/health-LCGP7UDT.js +0 -73
  471. package/dist/health-LCGP7UDT.js.map +0 -1
  472. package/dist/health-MCMRR6RQ.mjs +0 -73
  473. package/dist/health-MCMRR6RQ.mjs.map +0 -1
  474. package/dist/ingestion-templates-7TLETXIF.mjs +0 -169
  475. package/dist/ingestion-templates-7TLETXIF.mjs.map +0 -1
  476. package/dist/ingestion-templates-AT5AKWJB.js +0 -169
  477. package/dist/ingestion-templates-AT5AKWJB.js.map +0 -1
  478. package/dist/init-SQ5UUFDM.js +0 -16
  479. package/dist/init-SQ5UUFDM.js.map +0 -1
  480. package/dist/init-UGSR2T2P.mjs +0 -16
  481. package/dist/init-UGSR2T2P.mjs.map +0 -1
  482. package/dist/init-shell-2JQCBGMG.mjs +0 -71
  483. package/dist/init-shell-2JQCBGMG.mjs.map +0 -1
  484. package/dist/init-shell-UDTYTWJ4.js +0 -71
  485. package/dist/init-shell-UDTYTWJ4.js.map +0 -1
  486. package/dist/install-JNBCGN7Q.mjs +0 -191
  487. package/dist/install-JNBCGN7Q.mjs.map +0 -1
  488. package/dist/install-VBJKW5WP.js +0 -191
  489. package/dist/install-VBJKW5WP.js.map +0 -1
  490. package/dist/list-2ALO3KFG.js +0 -87
  491. package/dist/list-2ALO3KFG.js.map +0 -1
  492. package/dist/list-2YGHM2AD.mjs +0 -76
  493. package/dist/list-2YGHM2AD.mjs.map +0 -1
  494. package/dist/list-3XJ7VZN4.mjs +0 -75
  495. package/dist/list-3XJ7VZN4.mjs.map +0 -1
  496. package/dist/list-47FO2DBS.js +0 -80
  497. package/dist/list-47FO2DBS.js.map +0 -1
  498. package/dist/list-4JFVZU6U.mjs +0 -78
  499. package/dist/list-4JFVZU6U.mjs.map +0 -1
  500. package/dist/list-5DNRGKML.mjs +0 -80
  501. package/dist/list-5DNRGKML.mjs.map +0 -1
  502. package/dist/list-6CPPEJQV.js +0 -75
  503. package/dist/list-6CPPEJQV.js.map +0 -1
  504. package/dist/list-6UYNGBNA.mjs +0 -75
  505. package/dist/list-6UYNGBNA.mjs.map +0 -1
  506. package/dist/list-7F3TLLLA.js +0 -85
  507. package/dist/list-7F3TLLLA.js.map +0 -1
  508. package/dist/list-AVYXRPYR.mjs +0 -53
  509. package/dist/list-AVYXRPYR.mjs.map +0 -1
  510. package/dist/list-B5QJP7XO.mjs +0 -122
  511. package/dist/list-B5QJP7XO.mjs.map +0 -1
  512. package/dist/list-BI6VDR3L.mjs +0 -80
  513. package/dist/list-BI6VDR3L.mjs.map +0 -1
  514. package/dist/list-BIXZNQNL.mjs +0 -90
  515. package/dist/list-BIXZNQNL.mjs.map +0 -1
  516. package/dist/list-E2NKP4RN.mjs +0 -71
  517. package/dist/list-E2NKP4RN.mjs.map +0 -1
  518. package/dist/list-EX74E4W3.js +0 -82
  519. package/dist/list-EX74E4W3.js.map +0 -1
  520. package/dist/list-F7RK6OGO.js +0 -71
  521. package/dist/list-F7RK6OGO.js.map +0 -1
  522. package/dist/list-FQVXBMOV.js +0 -82
  523. package/dist/list-FQVXBMOV.js.map +0 -1
  524. package/dist/list-FTAHO7RS.js +0 -53
  525. package/dist/list-FTAHO7RS.js.map +0 -1
  526. package/dist/list-HJFLTMZZ.js +0 -80
  527. package/dist/list-HJFLTMZZ.js.map +0 -1
  528. package/dist/list-HZCZZBHB.js +0 -83
  529. package/dist/list-HZCZZBHB.js.map +0 -1
  530. package/dist/list-IIUX33VL.mjs +0 -86
  531. package/dist/list-IIUX33VL.mjs.map +0 -1
  532. package/dist/list-JFASUTLY.js +0 -78
  533. package/dist/list-JFASUTLY.js.map +0 -1
  534. package/dist/list-KJIOIAVI.mjs +0 -80
  535. package/dist/list-KJIOIAVI.mjs.map +0 -1
  536. package/dist/list-LKNXTUMI.js +0 -104
  537. package/dist/list-LKNXTUMI.js.map +0 -1
  538. package/dist/list-M34E5BJ5.js +0 -80
  539. package/dist/list-M34E5BJ5.js.map +0 -1
  540. package/dist/list-MX4GYY6P.mjs +0 -87
  541. package/dist/list-MX4GYY6P.mjs.map +0 -1
  542. package/dist/list-O5SCIB3L.js +0 -75
  543. package/dist/list-O5SCIB3L.js.map +0 -1
  544. package/dist/list-O6OJ5XHC.mjs +0 -72
  545. package/dist/list-O6OJ5XHC.mjs.map +0 -1
  546. package/dist/list-ODC5L7LD.mjs +0 -83
  547. package/dist/list-ODC5L7LD.mjs.map +0 -1
  548. package/dist/list-Q5WBWW4Q.mjs +0 -82
  549. package/dist/list-Q5WBWW4Q.mjs.map +0 -1
  550. package/dist/list-QA563QDB.js +0 -90
  551. package/dist/list-QA563QDB.js.map +0 -1
  552. package/dist/list-RJFCSUUQ.mjs +0 -111
  553. package/dist/list-RJFCSUUQ.mjs.map +0 -1
  554. package/dist/list-RMHLZBQG.js +0 -76
  555. package/dist/list-RMHLZBQG.js.map +0 -1
  556. package/dist/list-SRYZRJCV.js +0 -111
  557. package/dist/list-SRYZRJCV.js.map +0 -1
  558. package/dist/list-TOSZ7BU7.js +0 -86
  559. package/dist/list-TOSZ7BU7.js.map +0 -1
  560. package/dist/list-UQQ2PAU3.mjs +0 -104
  561. package/dist/list-UQQ2PAU3.mjs.map +0 -1
  562. package/dist/list-V2WO7LLU.js +0 -72
  563. package/dist/list-V2WO7LLU.js.map +0 -1
  564. package/dist/list-VA5A3CCK.mjs +0 -75
  565. package/dist/list-VA5A3CCK.mjs.map +0 -1
  566. package/dist/list-X6EIZ5MP.js +0 -75
  567. package/dist/list-X6EIZ5MP.js.map +0 -1
  568. package/dist/list-YUYYYQ7E.js +0 -122
  569. package/dist/list-YUYYYQ7E.js.map +0 -1
  570. package/dist/list-Z4GK3RXW.js +0 -78
  571. package/dist/list-Z4GK3RXW.js.map +0 -1
  572. package/dist/list-ZBKYVBPN.mjs +0 -85
  573. package/dist/list-ZBKYVBPN.mjs.map +0 -1
  574. package/dist/list-ZDLAHVOP.mjs +0 -78
  575. package/dist/list-ZDLAHVOP.mjs.map +0 -1
  576. package/dist/list-ZONPFTHT.mjs +0 -82
  577. package/dist/list-ZONPFTHT.mjs.map +0 -1
  578. package/dist/login-UWJ4SQ3T.mjs +0 -279
  579. package/dist/login-UWJ4SQ3T.mjs.map +0 -1
  580. package/dist/login-Y3TEPZOC.js +0 -279
  581. package/dist/login-Y3TEPZOC.js.map +0 -1
  582. package/dist/logout-RTWQU22E.mjs +0 -181
  583. package/dist/logout-RTWQU22E.mjs.map +0 -1
  584. package/dist/logout-TXOAFCK7.js +0 -181
  585. package/dist/logout-TXOAFCK7.js.map +0 -1
  586. package/dist/open-2IGFGDDB.mjs +0 -47
  587. package/dist/open-2IGFGDDB.mjs.map +0 -1
  588. package/dist/open-TCBDPKWM.js +0 -47
  589. package/dist/open-TCBDPKWM.js.map +0 -1
  590. package/dist/pull-3MXPXKVF.mjs +0 -27
  591. package/dist/pull-3MXPXKVF.mjs.map +0 -1
  592. package/dist/pull-5RX2YX5P.js +0 -27
  593. package/dist/pull-5RX2YX5P.js.map +0 -1
  594. package/dist/push-7L3NXCCJ.mjs +0 -27
  595. package/dist/push-7L3NXCCJ.mjs.map +0 -1
  596. package/dist/push-QPS47QAN.js +0 -27
  597. package/dist/push-QPS47QAN.js.map +0 -1
  598. package/dist/query-2PAEPPLR.js +0 -122
  599. package/dist/query-2PAEPPLR.js.map +0 -1
  600. package/dist/query-FJ4JJLRH.mjs +0 -122
  601. package/dist/query-FJ4JJLRH.mjs.map +0 -1
  602. package/dist/records-add-K6ZRY3MM.mjs +0 -98
  603. package/dist/records-add-K6ZRY3MM.mjs.map +0 -1
  604. package/dist/records-add-OQK2SWSP.js +0 -98
  605. package/dist/records-add-OQK2SWSP.js.map +0 -1
  606. package/dist/records-delete-DPNRLQRU.mjs +0 -46
  607. package/dist/records-delete-DPNRLQRU.mjs.map +0 -1
  608. package/dist/records-delete-UC3XJNIF.js +0 -46
  609. package/dist/records-delete-UC3XJNIF.js.map +0 -1
  610. package/dist/records-list-AC7ADD4R.js +0 -89
  611. package/dist/records-list-AC7ADD4R.js.map +0 -1
  612. package/dist/records-list-EEDFGR5M.mjs +0 -89
  613. package/dist/records-list-EEDFGR5M.mjs.map +0 -1
  614. package/dist/records-update-R5G7AOMD.js +0 -53
  615. package/dist/records-update-R5G7AOMD.js.map +0 -1
  616. package/dist/records-update-V23XILMF.mjs +0 -53
  617. package/dist/records-update-V23XILMF.mjs.map +0 -1
  618. package/dist/remove-JS3XWII2.mjs +0 -114
  619. package/dist/remove-JS3XWII2.mjs.map +0 -1
  620. package/dist/remove-QU7WDHPI.js +0 -114
  621. package/dist/remove-QU7WDHPI.js.map +0 -1
  622. package/dist/rename-AQZWJOSA.js +0 -42
  623. package/dist/rename-AQZWJOSA.js.map +0 -1
  624. package/dist/rename-NX4OMJDP.mjs +0 -42
  625. package/dist/rename-NX4OMJDP.mjs.map +0 -1
  626. package/dist/request-increase-FLFEPGIC.js +0 -37
  627. package/dist/request-increase-FLFEPGIC.js.map +0 -1
  628. package/dist/request-increase-NHM27JXH.mjs +0 -37
  629. package/dist/request-increase-NHM27JXH.mjs.map +0 -1
  630. package/dist/restore-HTAPXIPP.js +0 -73
  631. package/dist/restore-HTAPXIPP.js.map +0 -1
  632. package/dist/restore-R5LY5MWO.mjs +0 -73
  633. package/dist/restore-R5LY5MWO.mjs.map +0 -1
  634. package/dist/revoke-2JIUV7JE.mjs +0 -41
  635. package/dist/revoke-2JIUV7JE.mjs.map +0 -1
  636. package/dist/revoke-GH3YEBRW.js +0 -44
  637. package/dist/revoke-GH3YEBRW.js.map +0 -1
  638. package/dist/revoke-MS5OZQHS.js +0 -41
  639. package/dist/revoke-MS5OZQHS.js.map +0 -1
  640. package/dist/revoke-TQJVF3BL.mjs +0 -44
  641. package/dist/revoke-TQJVF3BL.mjs.map +0 -1
  642. package/dist/rotate-QUP62JOC.mjs +0 -52
  643. package/dist/rotate-QUP62JOC.mjs.map +0 -1
  644. package/dist/rotate-U3RJTWOO.js +0 -52
  645. package/dist/rotate-U3RJTWOO.js.map +0 -1
  646. package/dist/run-2KC3XYCD.js +0 -77
  647. package/dist/run-2KC3XYCD.js.map +0 -1
  648. package/dist/run-35JPAOLO.mjs +0 -83
  649. package/dist/run-35JPAOLO.mjs.map +0 -1
  650. package/dist/run-5YPCH5US.mjs +0 -77
  651. package/dist/run-5YPCH5US.mjs.map +0 -1
  652. package/dist/run-6BUAGYXY.mjs +0 -142
  653. package/dist/run-6BUAGYXY.mjs.map +0 -1
  654. package/dist/run-BB27OOPE.js +0 -131
  655. package/dist/run-BB27OOPE.js.map +0 -1
  656. package/dist/run-BPTFP3HA.mjs +0 -144
  657. package/dist/run-BPTFP3HA.mjs.map +0 -1
  658. package/dist/run-DVPUVKTV.mjs +0 -131
  659. package/dist/run-DVPUVKTV.mjs.map +0 -1
  660. package/dist/run-GJEOP5LP.js +0 -144
  661. package/dist/run-GJEOP5LP.js.map +0 -1
  662. package/dist/run-JLC2AGGB.js +0 -83
  663. package/dist/run-JLC2AGGB.js.map +0 -1
  664. package/dist/run-P5B7FK6K.js +0 -142
  665. package/dist/run-P5B7FK6K.js.map +0 -1
  666. package/dist/search-FMFV6U6P.mjs +0 -108
  667. package/dist/search-FMFV6U6P.mjs.map +0 -1
  668. package/dist/search-LEF4NLQJ.js +0 -108
  669. package/dist/search-LEF4NLQJ.js.map +0 -1
  670. package/dist/set-7Q2IUUPV.mjs +0 -105
  671. package/dist/set-7Q2IUUPV.mjs.map +0 -1
  672. package/dist/set-DYXQGJNE.js +0 -59
  673. package/dist/set-DYXQGJNE.js.map +0 -1
  674. package/dist/set-FVXIBW4X.js +0 -105
  675. package/dist/set-FVXIBW4X.js.map +0 -1
  676. package/dist/set-PMA5UWDK.mjs +0 -59
  677. package/dist/set-PMA5UWDK.mjs.map +0 -1
  678. package/dist/status-DS55UJ7O.mjs +0 -153
  679. package/dist/status-DS55UJ7O.mjs.map +0 -1
  680. package/dist/status-GSPWZ255.mjs +0 -56
  681. package/dist/status-GSPWZ255.mjs.map +0 -1
  682. package/dist/status-KH64EWPP.js +0 -153
  683. package/dist/status-KH64EWPP.js.map +0 -1
  684. package/dist/status-M4GI2HR3.js +0 -56
  685. package/dist/status-M4GI2HR3.js.map +0 -1
  686. package/dist/status-OAD2U66Z.js +0 -122
  687. package/dist/status-OAD2U66Z.js.map +0 -1
  688. package/dist/status-U3EPMBTN.mjs +0 -122
  689. package/dist/status-U3EPMBTN.mjs.map +0 -1
  690. package/dist/sync-PKDE2D7V.js +0 -132
  691. package/dist/sync-PKDE2D7V.js.map +0 -1
  692. package/dist/sync-XV5HX5TO.mjs +0 -132
  693. package/dist/sync-XV5HX5TO.mjs.map +0 -1
  694. package/dist/tail-CKK6GFNI.js +0 -108
  695. package/dist/tail-CKK6GFNI.js.map +0 -1
  696. package/dist/tail-D26CEKSH.mjs +0 -108
  697. package/dist/tail-D26CEKSH.mjs.map +0 -1
  698. package/dist/unset-FGAQM4WA.js +0 -107
  699. package/dist/unset-FGAQM4WA.js.map +0 -1
  700. package/dist/unset-TVSHRR64.mjs +0 -107
  701. package/dist/unset-TVSHRR64.mjs.map +0 -1
  702. package/dist/update-337XCLM7.mjs +0 -65
  703. package/dist/update-337XCLM7.mjs.map +0 -1
  704. package/dist/update-43JHGSN7.js +0 -106
  705. package/dist/update-43JHGSN7.js.map +0 -1
  706. package/dist/update-4KGPCVCD.js +0 -71
  707. package/dist/update-4KGPCVCD.js.map +0 -1
  708. package/dist/update-5DIMZPJB.mjs +0 -71
  709. package/dist/update-5DIMZPJB.mjs.map +0 -1
  710. package/dist/update-5WVIKR5E.js +0 -48
  711. package/dist/update-5WVIKR5E.js.map +0 -1
  712. package/dist/update-AAZVLFRJ.js +0 -75
  713. package/dist/update-AAZVLFRJ.js.map +0 -1
  714. package/dist/update-APD7MSPV.js +0 -61
  715. package/dist/update-APD7MSPV.js.map +0 -1
  716. package/dist/update-AR7L7TOZ.js +0 -48
  717. package/dist/update-AR7L7TOZ.js.map +0 -1
  718. package/dist/update-C3I3BHWG.js +0 -63
  719. package/dist/update-C3I3BHWG.js.map +0 -1
  720. package/dist/update-CDBNRXSO.mjs +0 -106
  721. package/dist/update-CDBNRXSO.mjs.map +0 -1
  722. package/dist/update-CXYYWVNO.mjs +0 -75
  723. package/dist/update-CXYYWVNO.mjs.map +0 -1
  724. package/dist/update-DUJU3A4R.mjs +0 -48
  725. package/dist/update-DUJU3A4R.mjs.map +0 -1
  726. package/dist/update-E3GH3WEX.mjs +0 -83
  727. package/dist/update-E3GH3WEX.mjs.map +0 -1
  728. package/dist/update-HHGQ2DVM.js +0 -83
  729. package/dist/update-HHGQ2DVM.js.map +0 -1
  730. package/dist/update-IFDJZ6LW.js +0 -66
  731. package/dist/update-IFDJZ6LW.js.map +0 -1
  732. package/dist/update-JEGVDVSK.js +0 -51
  733. package/dist/update-JEGVDVSK.js.map +0 -1
  734. package/dist/update-JL3MKZXC.mjs +0 -66
  735. package/dist/update-JL3MKZXC.mjs.map +0 -1
  736. package/dist/update-JUTNNHSA.mjs +0 -51
  737. package/dist/update-JUTNNHSA.mjs.map +0 -1
  738. package/dist/update-MBBSJQJL.mjs +0 -79
  739. package/dist/update-MBBSJQJL.mjs.map +0 -1
  740. package/dist/update-NOYJVXCB.mjs +0 -63
  741. package/dist/update-NOYJVXCB.mjs.map +0 -1
  742. package/dist/update-OFUQFYBD.js +0 -76
  743. package/dist/update-OFUQFYBD.js.map +0 -1
  744. package/dist/update-OZC2S3BC.js +0 -79
  745. package/dist/update-OZC2S3BC.js.map +0 -1
  746. package/dist/update-P4PNDOMU.mjs +0 -63
  747. package/dist/update-P4PNDOMU.mjs.map +0 -1
  748. package/dist/update-RJFENG32.mjs +0 -48
  749. package/dist/update-RJFENG32.mjs.map +0 -1
  750. package/dist/update-W2RQW53I.js +0 -65
  751. package/dist/update-W2RQW53I.js.map +0 -1
  752. package/dist/update-WFGCL4JS.mjs +0 -61
  753. package/dist/update-WFGCL4JS.mjs.map +0 -1
  754. package/dist/update-WTIR2BYE.js +0 -63
  755. package/dist/update-WTIR2BYE.js.map +0 -1
  756. package/dist/update-X7J6WRG3.mjs +0 -76
  757. package/dist/update-X7J6WRG3.mjs.map +0 -1
  758. package/dist/upload-7O3K4YAL.mjs +0 -80
  759. package/dist/upload-7O3K4YAL.mjs.map +0 -1
  760. package/dist/upload-DJA44RJ3.js +0 -80
  761. package/dist/upload-DJA44RJ3.js.map +0 -1
  762. package/dist/versions-2JD6EKCA.js +0 -85
  763. package/dist/versions-2JD6EKCA.js.map +0 -1
  764. package/dist/versions-HXI6GAD2.mjs +0 -85
  765. package/dist/versions-HXI6GAD2.mjs.map +0 -1
  766. package/dist/whoami-EI52YRCH.js +0 -30
  767. package/dist/whoami-EI52YRCH.js.map +0 -1
  768. package/dist/whoami-KGRA4QEY.mjs +0 -30
  769. package/dist/whoami-KGRA4QEY.mjs.map +0 -1
  770. package/dist/wrap-LBMHL6N6.mjs +0 -33
  771. package/dist/wrap-LBMHL6N6.mjs.map +0 -1
  772. package/dist/wrap-O7DQWEVA.js +0 -33
  773. package/dist/wrap-O7DQWEVA.js.map +0 -1
  774. /package/dist/{chunk-RIPASL56.mjs.map → chunk-2O4ILSP5.mjs.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-ZFFJYYDN.js","../src/cli/utils/responseFormat.ts","../src/cli/utils/promptConverter.ts","../src/cli/utils/fileManager.ts","../src/cli/utils/errors/prompt-not-found.error.ts"],"names":[],"mappings":"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","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-ZFFJYYDN.js","sourcesContent":[null,"/**\n * Bidirectional mapping between the platform's `outputs` array and the\n * local YAML `response_format` block.\n *\n * The platform is the single source of truth and stores structured output as\n * an `outputs` array. The local `.prompt.yaml` follows the GitHub Prompts\n * convention and carries a `response_format` block. Push and pull must be\n * exact inverses, so both directions live here and share one definition of\n * what \"flat structured fields\" vs. \"an opaque JSON schema\" means.\n *\n * Two shapes round-trip losslessly:\n *\n * - Flat platform fields (e.g. l1, l2, l3, reasoning) ⇆ a single-level\n * JSON-schema object whose properties are those fields. The platform keeps\n * showing them as individual fields after a pull → edit → push cycle.\n *\n * - A rich JSON schema (enums, nested objects, arrays, descriptions, …) ⇆ a\n * single `json_schema` output that preserves the schema verbatim.\n */\n\nexport type CliOutputType = \"str\" | \"float\" | \"bool\" | \"json_schema\";\n\nexport interface CliOutput {\n identifier: string;\n type: CliOutputType;\n json_schema?: Record<string, unknown>;\n}\n\nexport interface LocalResponseFormat {\n name?: string;\n schema: Record<string, unknown>;\n}\n\n/**\n * The CLI default output for an unstructured (plain text) prompt. A prompt\n * with exactly this single output has no structured response and therefore no\n * `response_format` block.\n */\nexport const DEFAULT_TEXT_OUTPUT: CliOutput = {\n identifier: \"output\",\n type: \"str\",\n};\n\nconst SCALAR_OUTPUT_TO_JSON_TYPE: Record<\n Exclude<CliOutputType, \"json_schema\">,\n string\n> = {\n str: \"string\",\n float: \"number\",\n bool: \"boolean\",\n};\n\nconst JSON_TYPE_TO_SCALAR_OUTPUT: Record<\n string,\n Exclude<CliOutputType, \"json_schema\">\n> = {\n string: \"str\",\n number: \"float\",\n integer: \"float\",\n boolean: \"bool\",\n};\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\n/**\n * Accepts either the canonical local form `{ name?, schema }` or the\n * OpenAI-standard wrapper `{ type: \"json_schema\", json_schema: { name, schema } }`\n * and normalizes to `{ name?, schema }`. Returns undefined when there is no\n * usable schema.\n */\nexport const normalizeResponseFormat = (\n raw: unknown,\n): LocalResponseFormat | undefined => {\n if (!isPlainObject(raw)) return undefined;\n\n // OpenAI-standard wrapper\n if (raw.type === \"json_schema\" && isPlainObject(raw.json_schema)) {\n const inner = raw.json_schema;\n if (isPlainObject(inner.schema)) {\n return {\n name: typeof inner.name === \"string\" ? inner.name : undefined,\n schema: inner.schema,\n };\n }\n return undefined;\n }\n\n // Canonical local form\n if (isPlainObject(raw.schema)) {\n return {\n name: typeof raw.name === \"string\" ? raw.name : undefined,\n schema: raw.schema,\n };\n }\n\n return undefined;\n};\n\n/**\n * A \"simple flat object schema\" has only scalar properties (string / number /\n * integer / boolean), no extra JSON-schema keywords on the schema or on any\n * property, and (when present) `required` listing exactly the properties.\n * These map losslessly to flat platform fields. Anything richer (enums,\n * arrays, nested objects, descriptions, …) is opaque and must be preserved\n * verbatim as a json_schema output.\n */\nexport const asFlatFields = (\n schema: Record<string, unknown>,\n): { identifier: string; type: Exclude<CliOutputType, \"json_schema\"> }[] | null => {\n if (schema.type !== \"object\") return null;\n if (!isPlainObject(schema.properties)) return null;\n\n const allowedSchemaKeys = new Set([\n \"type\",\n \"properties\",\n \"required\",\n \"additionalProperties\",\n ]);\n if (Object.keys(schema).some((k) => !allowedSchemaKeys.has(k))) return null;\n\n if (\n schema.additionalProperties !== undefined &&\n schema.additionalProperties !== false\n ) {\n return null;\n }\n\n const properties = schema.properties;\n const propertyNames = Object.keys(properties);\n if (propertyNames.length === 0) return null;\n\n const fields: {\n identifier: string;\n type: Exclude<CliOutputType, \"json_schema\">;\n }[] = [];\n\n for (const name of propertyNames) {\n const prop = properties[name];\n if (!isPlainObject(prop)) return null;\n if (Object.keys(prop).some((k) => k !== \"type\")) return null;\n const jsonType = prop.type;\n if (typeof jsonType !== \"string\") return null;\n const scalar = JSON_TYPE_TO_SCALAR_OUTPUT[jsonType];\n if (!scalar) return null;\n fields.push({ identifier: name, type: scalar });\n }\n\n if (schema.required !== undefined) {\n if (!Array.isArray(schema.required)) return null;\n const required = [...(schema.required as unknown[])].sort();\n const names = [...propertyNames].sort();\n if (\n required.length !== names.length ||\n required.some((r, i) => r !== names[i])\n ) {\n return null;\n }\n }\n\n return fields;\n};\n\n/**\n * Pull direction: reconstruct the local `response_format` block from the\n * platform `outputs` array. Returns undefined for a plain-text prompt so we\n * never invent a schema that wasn't there.\n */\nexport const outputsToResponseFormat = (\n outputs: CliOutput[] | undefined | null,\n fallbackName?: string,\n): LocalResponseFormat | undefined => {\n if (!outputs || outputs.length === 0) return undefined;\n\n const jsonSchemaOutput = outputs.find(\n (o) => o.type === \"json_schema\" && o.json_schema,\n );\n if (jsonSchemaOutput?.json_schema) {\n return {\n name: jsonSchemaOutput.identifier,\n schema: jsonSchemaOutput.json_schema,\n };\n }\n\n // Exactly the CLI default single text output → unstructured, no schema.\n if (\n outputs.length === 1 &&\n outputs[0]!.identifier === DEFAULT_TEXT_OUTPUT.identifier &&\n outputs[0]!.type === DEFAULT_TEXT_OUTPUT.type\n ) {\n return undefined;\n }\n\n // Flat structured fields → a single-level JSON schema object.\n const properties: Record<string, { type: string }> = {};\n for (const output of outputs) {\n if (output.type === \"json_schema\") continue;\n properties[output.identifier] = {\n type: SCALAR_OUTPUT_TO_JSON_TYPE[output.type],\n };\n }\n if (Object.keys(properties).length === 0) return undefined;\n\n return {\n name: fallbackName ?? \"output\",\n schema: {\n type: \"object\",\n properties,\n required: Object.keys(properties),\n additionalProperties: false,\n },\n };\n};\n\n/**\n * Push direction: turn the local `response_format` block back into the\n * platform `outputs` array. The exact inverse of {@link outputsToResponseFormat}:\n * a flat object schema expands to flat fields (so the platform keeps showing\n * them individually), anything richer becomes one json_schema output.\n */\nexport const responseFormatToOutputs = (\n raw: unknown,\n): CliOutput[] | undefined => {\n const rf = normalizeResponseFormat(raw);\n if (!rf) return undefined;\n\n const flat = asFlatFields(rf.schema);\n if (flat) {\n return flat.map((f) => ({ identifier: f.identifier, type: f.type }));\n }\n\n return [\n {\n identifier: rf.name ?? \"output\",\n type: \"json_schema\",\n json_schema: rf.schema,\n },\n ];\n};\n","import type {\n LocalPromptConfig,\n MaterializedPrompt,\n RuntimeParameters,\n} from \"../types\";\nimport { type PromptResponse, type UpdatePromptBody } from \"@/client-sdk/services/prompts/types\";\nimport {\n type CliOutput,\n type LocalResponseFormat,\n outputsToResponseFormat,\n} from \"./responseFormat\";\n\n/**\n * Converter utility for transforming between YAML prompt format and API service format.\n *\n * The YAML format follows the GitHub .prompt.yaml file format standard,\n * while the API format is our internal prompt service schema tied to the database.\n *\n * This separation allows us to maintain and evolve both formats independently\n * while keeping the conversion logic centralized and well-tested.\n */\nexport class PromptConverter {\n /**\n * Converts a Prompt instance from the API service to the MaterializedPrompt format\n * used for saving to the .materialized directory.\n */\n static fromApiToMaterialized(prompt: PromptResponse): MaterializedPrompt {\n return {\n id: prompt.id,\n name: prompt.name,\n version: prompt.version,\n versionId: prompt.versionId,\n model: prompt.model,\n messages: prompt.messages,\n prompt: prompt.prompt,\n temperature: prompt.temperature,\n maxTokens: prompt.maxTokens,\n inputs: prompt.inputs,\n outputs: prompt.outputs,\n parameters: prompt.parameters ?? {},\n updatedAt: prompt.updatedAt,\n };\n }\n\n /**\n * Converts a MaterializedPrompt to the YAML content structure\n * for saving to .prompt.yaml files.\n */\n static fromMaterializedToYaml(prompt: MaterializedPrompt): {\n model: string;\n modelParameters?: {\n temperature?: number;\n maxTokens?: number;\n };\n messages: Array<{\n role: \"system\" | \"user\" | \"assistant\";\n content: string;\n }>;\n response_format?: LocalResponseFormat;\n parameters?: RuntimeParameters;\n } {\n const result: any = {\n model: prompt.model,\n messages: prompt.messages,\n };\n\n if (Object.keys(prompt.parameters ?? {}).length > 0) {\n result.parameters = prompt.parameters;\n }\n\n // Add modelParameters if temperature or maxTokens exist. The server is the\n // source of truth for which sampling parameters a model accepts and omits\n // the ones it would reject (e.g. temperature on the gpt-5 family), so we\n // simply mirror what the API returned — never inject a default here.\n if (prompt.temperature !== undefined || prompt.maxTokens !== undefined) {\n result.modelParameters = {};\n if (prompt.temperature !== undefined) {\n result.modelParameters.temperature = prompt.temperature;\n }\n if (prompt.maxTokens !== undefined) {\n result.modelParameters.maxTokens = prompt.maxTokens;\n }\n }\n\n // Reconstruct the structured-output block from the platform outputs so a\n // pull never drops a response_format the user configured. Inverse of the\n // push direction in pushPrompts.\n const responseFormat = outputsToResponseFormat(\n prompt.outputs as CliOutput[] | undefined,\n prompt.name,\n );\n if (responseFormat) {\n result.response_format = responseFormat;\n }\n\n return result;\n }\n\n /**\n * Converts a LocalPromptConfig (loaded from YAML) to the format\n * expected by the API service for upserting.\n */\n static fromLocalToApiFormat(\n config: LocalPromptConfig,\n ): Omit<UpdatePromptBody, \"commitMessage\"> & { parameters?: RuntimeParameters }\n {\n return {\n model: config.model,\n temperature: config.modelParameters?.temperature,\n maxTokens: config.modelParameters?.max_tokens,\n messages: config.messages,\n parameters: config.parameters ?? {},\n };\n }\n\n /**\n * Extracts the system prompt from messages array.\n * Used when converting to API format that separates system prompt from messages.\n */\n static extractSystemPrompt(\n messages: Array<{ role: string; content: string }>,\n ): string {\n return messages.find((m) => m.role === \"system\")?.content ?? \"\";\n }\n\n /**\n * Filters out system messages from the messages array.\n * Used when converting to API format that handles system prompt separately.\n */\n static filterNonSystemMessages(\n messages: Array<{\n role: \"system\" | \"user\" | \"assistant\";\n content: string;\n }>,\n ): Array<{ role: \"user\" | \"assistant\"; content: string }> {\n return messages.filter((m) => m.role !== \"system\") as Array<{\n role: \"user\" | \"assistant\";\n content: string;\n }>;\n }\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as yaml from \"js-yaml\";\nimport chalk from \"chalk\";\nimport type { PromptsConfig, LocalPromptConfig, MaterializedPrompt, PromptsLock } from \"../types\";\nimport { localPromptConfigSchema } from \"../types\";\nimport { PromptConverter } from \"@/cli/utils/promptConverter\";\nimport { PromptFileNotFoundError } from \"./errors/prompt-not-found.error\";\nimport { formatApiErrorMessage } from \"@/client-sdk/services/_shared/format-api-error\";\n\nexport class FileManager {\n private static readonly PROMPTS_CONFIG_FILE = \"prompts.json\";\n private static readonly PROMPTS_LOCK_FILE = \"prompts-lock.json\";\n private static readonly PROMPTS_DIR = \"prompts\";\n private static readonly MATERIALIZED_DIR = \".materialized\";\n\n private static _projectRoot: string | undefined;\n\n /** Reset the cached project root. Tests use this to exercise different cwds. */\n static _resetProjectRootCache(): void {\n this._projectRoot = undefined;\n }\n\n private static readonly PROJECT_MARKERS = [\n \".git\",\n \"package.json\",\n \"pyproject.toml\",\n ];\n\n private static hasProjectMarker(dir: string): boolean {\n return this.PROJECT_MARKERS.some((m) => fs.existsSync(path.join(dir, m)));\n }\n\n private static findProjectRoot(): string {\n if (this._projectRoot) {\n return this._projectRoot;\n }\n\n const cwd = process.cwd();\n const fsRoot = path.parse(cwd).root;\n\n // Find the highest ancestor that still looks like part of \"this project\"\n // (has package.json / pyproject.toml / .git). If cwd itself has no marker,\n // we don't walk up at all — prevents grabbing a stray prompts.json from\n // /tmp or other shared scratch dirs.\n let topProjectDir: string | null = null;\n let scan = cwd;\n while (scan !== fsRoot) {\n if (this.hasProjectMarker(scan)) {\n topProjectDir = scan;\n }\n scan = path.dirname(scan);\n }\n\n if (!topProjectDir) {\n this._projectRoot = cwd;\n return cwd;\n }\n\n // Walk up from cwd looking for prompts.json, capped at the project boundary.\n let currentDir = cwd;\n while (true) {\n const configPath = path.join(currentDir, this.PROMPTS_CONFIG_FILE);\n if (fs.existsSync(configPath)) {\n this._projectRoot = currentDir;\n return currentDir;\n }\n if (currentDir === topProjectDir) break;\n currentDir = path.dirname(currentDir);\n }\n\n // No prompts.json anywhere within the project — default to cwd so `init`\n // creates it where the user actually ran the command. This also keeps\n // concurrent test workdirs isolated: each tempdir gets its own prompts.json\n // instead of all pointing at a shared repo-root file.\n this._projectRoot = cwd;\n return cwd;\n }\n\n static getPromptsConfigPath(): string {\n return path.join(this.findProjectRoot(), this.PROMPTS_CONFIG_FILE);\n }\n\n static getPromptsLockPath(): string {\n return path.join(this.findProjectRoot(), this.PROMPTS_LOCK_FILE);\n }\n\n static getPromptsDir(): string {\n return path.join(this.findProjectRoot(), this.PROMPTS_DIR);\n }\n\n static getMaterializedDir(): string {\n return path.join(this.getPromptsDir(), this.MATERIALIZED_DIR);\n }\n\n static ensureDirectories(): void {\n const promptsDir = this.getPromptsDir();\n const materializedDir = this.getMaterializedDir();\n\n if (!fs.existsSync(promptsDir)) {\n fs.mkdirSync(promptsDir, { recursive: true });\n }\n\n if (!fs.existsSync(materializedDir)) {\n fs.mkdirSync(materializedDir, { recursive: true });\n }\n }\n\n static loadPromptsConfig(): PromptsConfig {\n const configPath = this.getPromptsConfigPath();\n\n if (!fs.existsSync(configPath)) {\n return { prompts: {} };\n }\n\n try {\n const content = fs.readFileSync(configPath, \"utf-8\");\n return JSON.parse(content) as PromptsConfig;\n } catch (error) {\n throw new Error(`Failed to parse prompts.json: ${formatApiErrorMessage({ error })}`);\n }\n }\n\n static savePromptsConfig(config: PromptsConfig): void {\n const configPath = this.getPromptsConfigPath();\n fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + \"\\n\");\n }\n\n static initializePromptsConfig(): { created: boolean; path: string } {\n const configPath = this.getPromptsConfigPath();\n const existed = fs.existsSync(configPath);\n\n if (!existed) {\n const emptyConfig: PromptsConfig = { prompts: {} };\n this.savePromptsConfig(emptyConfig);\n return { created: true, path: configPath };\n }\n\n return { created: false, path: configPath };\n }\n\n static loadPromptsLock = (): PromptsLock => {\n const lockPath = this.getPromptsLockPath();\n\n if (!fs.existsSync(lockPath)) {\n return {\n lockfileVersion: 1,\n prompts: {}\n };\n }\n\n try {\n const content = fs.readFileSync(lockPath, \"utf-8\");\n return JSON.parse(content) as PromptsLock;\n } catch (error) {\n throw new Error(`Failed to parse prompts-lock.json: ${formatApiErrorMessage({ error })}`);\n }\n }\n\n static savePromptsLock(lock: PromptsLock): void {\n const lockPath = this.getPromptsLockPath();\n fs.writeFileSync(lockPath, JSON.stringify(lock, null, 2) + \"\\n\");\n }\n\n static initializePromptsLock(): { created: boolean; path: string } {\n const lockPath = this.getPromptsLockPath();\n const existed = fs.existsSync(lockPath);\n\n if (!existed) {\n const emptyLock: PromptsLock = {\n lockfileVersion: 1,\n prompts: {}\n };\n this.savePromptsLock(emptyLock);\n return { created: true, path: lockPath };\n }\n\n return { created: false, path: lockPath };\n }\n\n static loadLocalPrompt = (filePath: string): LocalPromptConfig => {\n const fullPath = path.resolve(filePath);\n\n if (!fs.existsSync(fullPath)) {\n throw new PromptFileNotFoundError(filePath);\n }\n\n try {\n const content = fs.readFileSync(fullPath, \"utf-8\");\n const rawData = yaml.load(content);\n\n // Validate with zod and provide nice error messages\n const result = localPromptConfigSchema.safeParse(rawData);\n\n if (!result.success) {\n // Format zod errors nicely (manually since z.prettifyError might not be available)\n const prettyError = result.error.issues\n .map(issue => `✖ ${issue.message}${issue.path.length > 0 ? `\\n → at ${issue.path.join('.')}` : ''}`)\n .join('\\n');\n\n throw new Error(\n `Invalid prompt configuration in ${chalk.yellow(filePath)}:\\n${prettyError}`\n );\n }\n\n return result.data;\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"Invalid prompt configuration\")) {\n throw error; // Re-throw zod validation errors as-is\n }\n throw new Error(`Failed to parse local prompt file ${filePath}: ${formatApiErrorMessage({ error })}`);\n }\n }\n\n static saveMaterializedPrompt(name: string, prompt: MaterializedPrompt): string {\n const materializedDir = this.getMaterializedDir();\n const parts = name.split(\"/\");\n const fileName = `${parts[parts.length - 1]}.prompt.yaml`;\n\n // Create nested directories if needed\n if (parts.length > 1) {\n const subDir = path.join(materializedDir, ...parts.slice(0, -1));\n if (!fs.existsSync(subDir)) {\n fs.mkdirSync(subDir, { recursive: true });\n }\n }\n\n const filePath = path.join(materializedDir, ...parts.slice(0, -1), fileName);\n\n // Convert to YAML format using the converter\n const yamlContent = PromptConverter.fromMaterializedToYaml(prompt);\n\n const yamlString = yaml.dump(yamlContent, {\n lineWidth: -1,\n noRefs: true,\n sortKeys: false\n });\n\n fs.writeFileSync(filePath, yamlString);\n return filePath;\n }\n\n static getLocalPromptFiles = (): string[] => {\n const promptsDir = this.getPromptsDir();\n const materializedDir = this.getMaterializedDir();\n\n if (!fs.existsSync(promptsDir)) {\n return [];\n }\n\n const files: string[] = [];\n\n const walkDir = (dir: string, relativePath = \"\"): void => {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n const relativeFilePath = path.join(relativePath, entry.name);\n\n if (entry.isDirectory()) {\n // Skip the .materialized directory\n if (fullPath === materializedDir) {\n continue;\n }\n walkDir(fullPath, relativeFilePath);\n } else if (entry.isFile() && entry.name.endsWith(\".prompt.yaml\")) {\n files.push(path.join(promptsDir, relativeFilePath));\n }\n }\n };\n\n walkDir(promptsDir);\n return files;\n }\n\n static promptNameFromPath(filePath: string): string {\n const promptsDir = this.getPromptsDir();\n const relativePath = path.relative(promptsDir, filePath);\n return relativePath.replace(/\\.prompt\\.yaml$/, \"\");\n }\n\n static cleanupOrphanedMaterializedFiles(currentDependencies: Set<string>): string[] {\n const materializedDir = this.getMaterializedDir();\n\n if (!fs.existsSync(materializedDir)) {\n return [];\n }\n\n const cleaned: string[] = [];\n\n const cleanupDir = (dir: string, relativePath = \"\"): void => {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n const relativeFilePath = path.join(relativePath, entry.name);\n\n if (entry.isDirectory()) {\n cleanupDir(fullPath, relativeFilePath);\n\n // Remove empty directories\n try {\n const dirEntries = fs.readdirSync(fullPath);\n if (dirEntries.length === 0) {\n fs.rmdirSync(fullPath);\n }\n } catch {\n // Directory not empty or other error, ignore\n }\n } else if (entry.isFile() && entry.name.endsWith(\".prompt.yaml\")) {\n // Extract prompt name from materialized file path\n const promptName = relativeFilePath.replace(/\\.prompt\\.yaml$/, \"\");\n\n if (!currentDependencies.has(promptName)) {\n fs.unlinkSync(fullPath);\n cleaned.push(promptName);\n }\n }\n }\n };\n\n cleanupDir(materializedDir);\n return cleaned;\n }\n\n static updateLockEntry(lock: PromptsLock, name: string, prompt: MaterializedPrompt, materializedPath: string): void {\n const relativePath = path.relative(this.findProjectRoot(), materializedPath);\n\n lock.prompts[name] = {\n version: prompt.version,\n versionId: prompt.versionId,\n materialized: relativePath,\n };\n }\n\n static removeFromLock(lock: PromptsLock, names: string[]): void {\n for (const name of names) {\n delete lock.prompts[name];\n }\n }\n\n static addToGitignore(entry: string): { added: boolean; existed: boolean } {\n const gitignorePath = path.join(this.findProjectRoot(), \".gitignore\");\n\n // Check if .gitignore exists\n if (!fs.existsSync(gitignorePath)) {\n // Create new .gitignore with the entry\n fs.writeFileSync(gitignorePath, `${entry}\\n`);\n return { added: true, existed: false };\n }\n\n // Read existing .gitignore\n const content = fs.readFileSync(gitignorePath, \"utf-8\");\n const lines = content.split(\"\\n\").map(line => line.trim());\n\n // Check if entry already exists\n if (lines.includes(entry)) {\n return { added: false, existed: true };\n }\n\n // Add entry to .gitignore\n const newContent = content.endsWith(\"\\n\") ? `${content}${entry}\\n` : `${content}\\n${entry}\\n`;\n fs.writeFileSync(gitignorePath, newContent);\n\n return { added: true, existed: false };\n }\n}\n","export class PromptFileNotFoundError extends Error {\n constructor(filePath: string) {\n super(`Local prompt file not found: ${filePath}`);\n this.name = 'PromptFileNotFoundError';\n }\n}\n"]}
@@ -1,63 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
-
3
-
4
-
5
-
6
- var _chunkDOJBPYAEjs = require('./chunk-DOJBPYAE.js');
7
-
8
-
9
- var _chunkSNKGSX5Ijs = require('./chunk-SNKGSX5I.js');
10
-
11
-
12
- var _chunkNYCKS3GGjs = require('./chunk-NYCKS3GG.js');
13
-
14
-
15
- var _chunkLSRJHTPLjs = require('./chunk-LSRJHTPL.js');
16
-
17
-
18
- var _chunkHDA25KWZjs = require('./chunk-HDA25KWZ.js');
19
-
20
- // src/cli/commands/dataset/service-factory.ts
21
- function createDatasetService() {
22
- var _a;
23
- const apiKey = (_a = process.env.LANGWATCH_API_KEY) != null ? _a : "";
24
- const endpoint = _chunkSNKGSX5Ijs.resolveControlPlaneUrl.call(void 0, ).replace(/\/$/, "");
25
- return new (0, _chunkDOJBPYAEjs.DatasetService)({
26
- langwatchApiClient: _chunkLSRJHTPLjs.createLangWatchApiClient.call(void 0, apiKey, endpoint),
27
- logger: new (0, _chunkHDA25KWZjs.NoOpLogger)(),
28
- endpoint,
29
- apiKey
30
- });
31
- }
32
-
33
- // src/cli/commands/dataset/error-handler.ts
34
- var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
35
- function handleDatasetCommandError({
36
- spinner,
37
- error,
38
- context
39
- }) {
40
- if (error instanceof _chunkDOJBPYAEjs.DatasetNotFoundError) {
41
- spinner.fail(_chalk2.default.red(`Not found: ${error.message}`));
42
- } else if (error instanceof _chunkDOJBPYAEjs.DatasetPlanLimitError) {
43
- spinner.fail(_chalk2.default.red(`Plan limit reached: ${error.message}`));
44
- if (error.current !== void 0 && error.max !== void 0) {
45
- console.error(
46
- _chalk2.default.gray(
47
- ` Current ${error.limitType}: ${error.current} / ${error.max}`
48
- )
49
- );
50
- }
51
- } else if (error instanceof _chunkDOJBPYAEjs.DatasetApiError) {
52
- _chunkNYCKS3GGjs.failSpinner.call(void 0, { spinner, error, action: context });
53
- } else {
54
- _chunkNYCKS3GGjs.failSpinner.call(void 0, { spinner, error, action: context });
55
- }
56
- process.exit(1);
57
- }
58
-
59
-
60
-
61
-
62
- exports.createDatasetService = createDatasetService; exports.handleDatasetCommandError = handleDatasetCommandError;
63
- //# sourceMappingURL=chunk-ZX6VUKK5.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-ZX6VUKK5.js","../src/cli/commands/dataset/service-factory.ts","../src/cli/commands/dataset/error-handler.ts"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACA;ACTO,SAAS,oBAAA,CAAA,EAAuC;AAVvD,EAAA,IAAA,EAAA;AAWE,EAAA,MAAM,OAAA,EAAA,CAAS,GAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,iBAAA,EAAA,GAAZ,KAAA,EAAA,GAAA,EAAiC,EAAA;AAChD,EAAA,MAAM,SAAA,EACJ,qDAAA,CAAuB,CACvB,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAEnB,EAAA,OAAO,IAAI,oCAAA,CAAe;AAAA,IACxB,kBAAA,EAAoB,uDAAA,MAAyB,EAAQ,QAAQ,CAAA;AAAA,IAC7D,MAAA,EAAQ,IAAI,gCAAA,CAAW,CAAA;AAAA,IACvB,QAAA;AAAA,IACA;AAAA,EACF,CAAC,CAAA;AACH;ADSA;AACA;AEhCA,4EAAkB;AAsBX,SAAS,yBAAA,CAA0B;AAAA,EACxC,OAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAIU;AACR,EAAA,GAAA,CAAI,MAAA,WAAiB,qCAAA,EAAsB;AACzC,IAAA,OAAA,CAAQ,IAAA,CAAK,eAAA,CAAM,GAAA,CAAI,CAAA,WAAA,EAAc,KAAA,CAAM,OAAO,CAAA,CAAA;AACD,EAAA;AACH,IAAA;AACG,IAAA;AACvC,MAAA;AACA,QAAA;AACmC,UAAA;AACzC,QAAA;AACF,MAAA;AACF,IAAA;AAC2C,EAAA;AAII,IAAA;AAC1C,EAAA;AAC0C,IAAA;AACjD,EAAA;AACc,EAAA;AAChB;AFMuD;AACA;AACA;AACA;AACA","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/chunk-ZX6VUKK5.js","sourcesContent":[null,"import { DatasetService } from \"@/client-sdk/services/datasets\";\nimport { createLangWatchApiClient } from \"@/internal/api/client\";\nimport { NoOpLogger } from \"@/logger\";\nimport { DEFAULT_ENDPOINT } from \"@/internal/constants\";\n\nimport { resolveControlPlaneUrl } from \"@/cli/utils/governance/resolveEndpoint\";\n/**\n * Creates a DatasetService configured from environment variables.\n * Reused by all dataset CLI commands.\n */\nexport function createDatasetService(): DatasetService {\n const apiKey = process.env.LANGWATCH_API_KEY ?? \"\";\n const endpoint = (\n resolveControlPlaneUrl()\n ).replace(/\\/$/, \"\");\n\n return new DatasetService({\n langwatchApiClient: createLangWatchApiClient(apiKey, endpoint),\n logger: new NoOpLogger(),\n endpoint,\n apiKey,\n });\n}\n","import chalk from \"chalk\";\nimport type { Ora } from \"ora\";\nimport {\n DatasetApiError,\n DatasetNotFoundError,\n DatasetPlanLimitError,\n} from \"@/client-sdk/services/datasets/errors\";\nimport { failSpinner } from \"../../utils/spinnerError\";\n\n/**\n * Centralized error handler for all dataset CLI commands.\n * Maps known error types to a single spinner-fail line (plus an optional\n * detail line for plan limits) and exits with code 1.\n *\n * @param spinner - The ora spinner to fail. The spinner's message is the\n * only top-level error line rendered — we never emit a separate\n * `console.error` that would produce two disconnected lines.\n * @param error - The caught error\n * @param context - Human-readable action description (e.g. \"create dataset\",\n * \"upload records\"). Used as a fallback prefix when the error doesn't\n * already carry one.\n */\nexport function handleDatasetCommandError({\n spinner,\n error,\n context,\n}: {\n spinner: Ora;\n error: unknown;\n context: string;\n}): never {\n if (error instanceof DatasetNotFoundError) {\n spinner.fail(chalk.red(`Not found: ${error.message}`));\n } else if (error instanceof DatasetPlanLimitError) {\n spinner.fail(chalk.red(`Plan limit reached: ${error.message}`));\n if (error.current !== undefined && error.max !== undefined) {\n console.error(\n chalk.gray(\n ` Current ${error.limitType}: ${error.current} / ${error.max}`,\n ),\n );\n }\n } else if (error instanceof DatasetApiError) {\n // DatasetApiError.message is already built with formatApiErrorForOperation\n // (\"Failed to <op>: <detail>\"), so forward it as-is via failSpinner to keep\n // the double-prefix guard and single-line rendering consistent.\n failSpinner({ spinner, error, action: context });\n } else {\n failSpinner({ spinner, error, action: context });\n }\n process.exit(1);\n}\n"]}
@@ -1 +0,0 @@
1
- #!/usr/bin/env node
@@ -1 +0,0 @@
1
- #!/usr/bin/env node
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/langwatch/langwatch/typescript-sdk/dist/cli/index.js","../../src/cli/index.ts","../../src/cli/commands/experiment/list-runs.ts","../../src/cli/commands/experiment/results.ts","../../src/cli/commands/experiment/list.ts"],"names":["avg","_a","chalk","ora","DEFAULT_LIMIT","runStatus","MAX_PAGE_SIZE","createCommand"],"mappings":"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","file":"/home/runner/work/langwatch/langwatch/typescript-sdk/dist/cli/index.js","sourcesContent":[null,"#!/usr/bin/env node\n\n// Load environment variables BEFORE any other imports\nimport { config } from \"dotenv\";\n// quiet: silence dotenv's \"injecting env\" tip line on every CLI run.\nconfig({ quiet: true });\n\nimport { Command } from \"commander\";\nimport { parsePromptSpec } from \"./types\";\nimport { formatApiErrorMessage } from \"../client-sdk/services/_shared/format-api-error\";\nimport { experimentListRunsCommand } from \"./commands/experiment/list-runs.js\";\nimport { experimentResultsCommand } from \"./commands/experiment/results.js\";\nimport { experimentListCommand } from \"./commands/experiment/list.js\";\n\ndeclare const __CLI_VERSION__: string;\n\n// Import commands with proper async handling\nconst addCommand = async (name: string, options: { version?: string; localFile?: string }): Promise<void> => {\n const { addCommand: addCommandImpl } = await import(\"./commands/add.js\");\n return addCommandImpl(name, options);\n};\n\nconst removeCommand = async (name: string): Promise<void> => {\n const { removeCommand: removeCommandImpl } = await import(\"./commands/remove.js\");\n return removeCommandImpl(name);\n};\n\nconst initCommand = async (): Promise<void> => {\n const { initCommand: initCommandImpl } = await import(\"./commands/init.js\");\n return initCommandImpl();\n};\n\nconst loginCommand = async (\n options?: { apiKey?: string; device?: boolean; browser?: string },\n): Promise<void> => {\n const { loginCommand: loginCommandImpl } = await import(\"./commands/login.js\");\n return loginCommandImpl(options);\n};\n\nconst listCommand = async (options?: { format?: string }): Promise<void> => {\n const { listCommand: listCommandImpl } = await import(\"./commands/list.js\");\n return listCommandImpl(options);\n};\n\nconst syncCommand = async (): Promise<void> => {\n const { syncCommand: syncCommandImpl } = await import(\"./commands/sync.js\");\n return syncCommandImpl();\n};\n\nconst pullCommand = async (options?: { tag?: string }): Promise<void> => {\n const { pullCommand: pullCommandImpl } = await import(\"./commands/pull.js\");\n return pullCommandImpl(options);\n};\n\n// Tag commands\nconst tagListCommand = async (options?: { format?: string }): Promise<void> => {\n const { tagListCommand: impl } = await import(\"./commands/tag/list.js\");\n return impl(options);\n};\n\nconst tagCreateCommand = async (name: string): Promise<void> => {\n const { tagCreateCommand: impl } = await import(\"./commands/tag/create.js\");\n return impl(name);\n};\n\nconst tagRenameCommand = async (oldName: string, newName: string): Promise<void> => {\n const { tagRenameCommand: impl } = await import(\"./commands/tag/rename.js\");\n return impl(oldName, newName);\n};\n\nconst tagAssignCommand = async (promptHandle: string, tagName: string, options?: { version?: string }): Promise<void> => {\n const { tagAssignCommand: impl } = await import(\"./commands/tag/assign.js\");\n return impl(promptHandle, tagName, options);\n};\n\nconst tagDeleteCommand = async (tagName: string, options?: { force?: boolean }): Promise<void> => {\n const { tagDeleteCommand: impl } = await import(\"./commands/tag/delete.js\");\n return impl(tagName, options);\n};\n\nconst pushCommand = async (options?: { forceLocal?: boolean; forceRemote?: boolean }): Promise<void> => {\n const { pushCommand: pushCommandImpl } = await import(\"./commands/push.js\");\n return pushCommandImpl(options);\n};\n\nconst createCommand = async (name: string, options: Record<string, unknown>): Promise<void> => {\n const { createCommand: createCommandImpl } = await import(\"./commands/create.js\");\n return createCommandImpl(name, options);\n};\n\n// Evaluator commands\nconst listEvaluatorsCommand = async (options?: { format?: string }): Promise<void> => {\n const { listEvaluatorsCommand: impl } = await import(\"./commands/evaluators/list.js\");\n return impl(options);\n};\n\nconst getEvaluatorCommand = async (idOrSlug: string, options?: { format?: string }): Promise<void> => {\n const { getEvaluatorCommand: impl } = await import(\"./commands/evaluators/get.js\");\n return impl(idOrSlug, options);\n};\n\nconst createEvaluatorCommand = async (name: string, options: { type: string; format?: string }): Promise<void> => {\n const { createEvaluatorCommand: impl } = await import(\"./commands/evaluators/create.js\");\n return impl(name, options);\n};\n\nconst updateEvaluatorCommand = async (idOrSlug: string, options: { name?: string; settings?: string; format?: string }): Promise<void> => {\n const { updateEvaluatorCommand: impl } = await import(\"./commands/evaluators/update.js\");\n return impl(idOrSlug, options);\n};\n\nconst deleteEvaluatorCommand = async (idOrSlug: string, options?: { format?: string }): Promise<void> => {\n const { deleteEvaluatorCommand: impl } = await import(\"./commands/evaluators/delete.js\");\n return impl(idOrSlug, options);\n};\n\nconst program = new Command();\n\nprogram\n .name(\"langwatch\")\n .description(\"LangWatch CLI - Manage prompts, datasets, evaluators, scenarios, suites, and more\")\n .version(__CLI_VERSION__, \"-v, --version\", \"Display the current version\")\n .enablePositionalOptions()\n .passThroughOptions()\n .configureHelp({\n showGlobalOptions: true,\n })\n .showHelpAfterError()\n .showSuggestionAfterError();\n\n// Top-level commands\nconst loginCmd = program\n .command(\"login\")\n .description(\n \"Login to LangWatch. With no flags, asks where (cloud vs self-hosted) and how (AI tools vs project SDK). For CI/agents pass --device, --project, --api-key, or --token to skip prompts.\",\n )\n .option(\"--api-key <key>\", \"Set API key non-interactively (CI/agents that already have a project API key) — writes to .env\")\n .option(\"--endpoint <url>\", \"Override the LangWatch control-plane URL for this login (self-hosted instances)\")\n .option(\n \"--device\",\n \"RFC 8628 device-flow login via your company SSO; provisions a personal virtual key for Claude Code / Codex / Cursor / Gemini CLI\",\n )\n .option(\n \"--project\",\n \"Force project login: mint a project SDK key via the browser and write it to .env (for the SDK, `langwatch eval`, prompts). The implicit default in non-TTY contexts.\",\n )\n .option(\n \"--token <token>\",\n \"Set device-session token non-interactively (CI/agents that already have a pre-minted token from the dashboard) — writes to ~/.langwatch/config.json\",\n )\n .option(\n \"--browser <name>\",\n \"browser to open for device-flow approval (chrome|chromium|firefox|safari|none|<path>)\",\n );\n\nloginCmd.action(async (options: { apiKey?: string; device?: boolean; project?: boolean; browser?: string; endpoint?: string; token?: string }) => {\n try {\n await loginCommand(options);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n});\n\n// `langwatch config <get|set|list>` — explicit persistence + introspection\n// for user-global CLI config. Mirrors `gh config` / `doctl auth init` /\n// `stripe config` patterns so users don't hand-edit ~/.langwatch/config.json.\nconst configCmd = program\n .command(\"config\")\n .description(\"Read or write user-global CLI configuration (endpoint, gateway-url)\");\n\nconfigCmd\n .command(\"set <key> <value>\")\n .description(\"Persist a config value to ~/.langwatch/config.json (e.g. `langwatch config set endpoint https://lw.acme.internal`)\")\n .action(async (key: string, value: string) => {\n const { configSetCommand } = await import(\"./commands/config.js\");\n await configSetCommand(key, value);\n });\n\nconfigCmd\n .command(\"get <key>\")\n .description(\"Print the resolved value for a config key (uses the same flag > env > config > default priority as the CLI)\")\n .action(async (key: string) => {\n const { configGetCommand } = await import(\"./commands/config.js\");\n await configGetCommand(key);\n });\n\nconfigCmd\n .command(\"list\")\n .description(\"List the current resolved values + their sources (no secrets shown)\")\n .action(async () => {\n const { configListCommand } = await import(\"./commands/config.js\");\n await configListCommand();\n });\n\nprogram\n .command(\"open [path]\")\n .description(\n \"Open the LangWatch app in your browser. No path: /me in personal mode, project home if LANGWATCH_API_KEY is set. With a path: BASE/<path>.\",\n )\n .option(\"--browser <name>\", \"browser to open (chrome|chromium|firefox|safari|none|<path>)\")\n .action(async (path: string | undefined, options: { browser?: string }) => {\n try {\n const { openCommand } = await import(\"./commands/open.js\");\n await openCommand({ path, browser: options.browser });\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\n// AI Gateway governance — read identity, deep-link, request budget increase.\nprogram\n .command(\"whoami\")\n .description(\"Print the identity persisted by `langwatch login --device` (governance plane).\")\n .action(async () => {\n try {\n const { whoamiCommand } = await import(\"./commands/whoami.js\");\n await whoamiCommand();\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\nprogram\n .command(\"request-increase\")\n .description(\"Open the budget-increase request page (uses the gateway-issued signed URL when available).\")\n .option(\"--browser <name>\", \"browser to open (chrome|chromium|firefox|safari|none|<path>)\")\n .action(async (options: { browser?: string }) => {\n try {\n const { requestIncreaseCommand } = await import(\"./commands/request-increase.js\");\n await requestIncreaseCommand(options);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\n// AI Gateway governance — wrapped tool runners.\n// Each `langwatch <tool>` exec's the underlying binary with the\n// right ANTHROPIC_*/OPENAI_*/GEMINI_* env vars injected pointing\n// at the gateway, after a Screen-8 budget pre-check.\n//\n// Marked `hidden:true` so they don't pollute the top-level command list\n// in `langwatch --help`; rendered together under a \"Coding assistants:\"\n// section via addHelpText below. `langwatch <tool> --help` still works.\nprogram\n .command(\"claude\", { hidden: true })\n .description(\"Run `claude` (Claude Code) routed through the LangWatch gateway.\")\n .allowUnknownOption(true)\n .allowExcessArguments(true)\n .helpOption(false)\n .action(async (_opts, cmd: { args?: string[] }) => {\n try {\n const { wrapClaude } = await import(\"./commands/wrap.js\");\n await wrapClaude(cmd.args ?? []);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\nprogram\n .command(\"codex\", { hidden: true })\n .description(\"Run `codex` (OpenAI Codex CLI) routed through the LangWatch gateway.\")\n .allowUnknownOption(true)\n .allowExcessArguments(true)\n .helpOption(false)\n .action(async (_opts, cmd: { args?: string[] }) => {\n try {\n const { wrapCodex } = await import(\"./commands/wrap.js\");\n await wrapCodex(cmd.args ?? []);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\nprogram\n .command(\"cursor\", { hidden: true })\n .description(\"Run `cursor` routed through the LangWatch gateway.\")\n .allowUnknownOption(true)\n .allowExcessArguments(true)\n .helpOption(false)\n .action(async (_opts, cmd: { args?: string[] }) => {\n try {\n const { wrapCursor } = await import(\"./commands/wrap.js\");\n await wrapCursor(cmd.args ?? []);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\nprogram\n .command(\"gemini\", { hidden: true })\n .description(\"Run `gemini` (Gemini CLI) routed through the LangWatch gateway.\")\n .allowUnknownOption(true)\n .allowExcessArguments(true)\n .helpOption(false)\n .action(async (_opts, cmd: { args?: string[] }) => {\n try {\n const { wrapGemini } = await import(\"./commands/wrap.js\");\n await wrapGemini(cmd.args ?? []);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\nprogram\n .command(\"opencode\")\n .description(\"Run `opencode` routed through the LangWatch gateway (multi-provider; injects both Anthropic and OpenAI env vars).\")\n .allowUnknownOption(true)\n .allowExcessArguments(true)\n .helpOption(false)\n .action(async (_opts, cmd: { args?: string[] }) => {\n try {\n const { wrapOpencode } = await import(\"./commands/wrap.js\");\n await wrapOpencode(cmd.args ?? []);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\n// 'after' (not 'afterAll') so the section only renders on `langwatch --help`,\n// not on every `langwatch <subcommand> --help` invocation.\nprogram.addHelpText(\n \"after\",\n [\n \"\",\n \"Coding assistants:\",\n \" claude Run `claude` (Claude Code) routed through the gateway\",\n \" codex Run `codex` (OpenAI Codex CLI) routed through the gateway\",\n \" cursor Run `cursor` routed through the gateway\",\n \" gemini Run `gemini` (Gemini CLI) routed through the gateway\",\n \" opencode Run `opencode` (multi-provider) routed through the gateway\",\n \"\",\n ].join(\"\\n\"),\n);\n\nprogram\n .command(\"logout\")\n .description(\"Log out: revoke + clear the device session AND remove the telemetry wiring `langwatch <tool>` installed (claude settings.json, codex config.toml, gemini/opencode shell functions). Only langwatch-authored blocks are removed; the project API key in .env is left alone. Idempotent.\")\n .option(\"-y, --yes\", \"skip the confirmation prompt\")\n .option(\"--keep-credentials\", \"remove the telemetry wiring but stay logged in\")\n .action(async (options: { yes?: boolean; keepCredentials?: boolean }) => {\n try {\n const { logoutCommand } = await import(\"./commands/logout.js\");\n await logoutCommand(options);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\nprogram\n .command(\"init-shell\")\n .description(\"Print an eval-able shell snippet so any shell session auto-exports the gateway env vars (alternative to `langwatch claude`).\")\n .argument(\"[shell]\", \"zsh|bash|fish|cmd|powershell\", \"zsh\")\n .action(async (shell: string) => {\n try {\n const { initShellCommand } = await import(\"./commands/init-shell.js\");\n await initShellCommand(shell);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\n// `langwatch ingest *` — read-only debug tools for the IngestionSource\n// + Activity Monitor surfaces. Mirrors the web admin /settings/governance\n// flows for ops folks who live in terminal. Authoring stays browser-only.\nconst ingestCmd = program\n .command(\"ingest\")\n .description(\"Inspect IngestionSources and tail their recent OCSF-normalised events (read-only governance debug helpers).\");\n\ningestCmd\n .command(\"list\")\n .description(\"List the org's IngestionSources (active by default; --all includes archived).\")\n .option(\"--all\", \"include archived sources\")\n .option(\"--json\", \"emit machine-readable JSON\")\n .action(async (options: { all?: boolean; json?: boolean }) => {\n try {\n const { ingestListCommand } = await import(\"./commands/ingest/list.js\");\n await ingestListCommand(options);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\ningestCmd\n .command(\"tail <sourceId>\")\n .description(\"Stream the most recent events for an IngestionSource. --follow polls every 3s.\")\n .option(\"--limit <n>\", \"how many events to fetch on first poll (default 50)\", (v) => parseInt(v, 10))\n .option(\"--follow\", \"keep polling for new events; exit on Ctrl-C\")\n .option(\"--json\", \"emit machine-readable JSON\")\n .action(async (sourceId: string, options: { limit?: number; follow?: boolean; json?: boolean }) => {\n try {\n const { ingestTailCommand } = await import(\"./commands/ingest/tail.js\");\n await ingestTailCommand(sourceId, options);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\ningestCmd\n .command(\"health <sourceId>\")\n .description(\"Show events received in the last 24h / 7d / 30d + last-success timestamp for one IngestionSource.\")\n .option(\"--json\", \"emit machine-readable JSON\")\n .action(async (sourceId: string, options: { json?: boolean }) => {\n try {\n const { ingestHealthCommand } = await import(\"./commands/ingest/health.js\");\n await ingestHealthCommand(sourceId, options);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\n// `langwatch ingest install <tool>` — hidden primitive used by CI /\n// devcontainer / scripted setups. The user surface is\n// `langwatch <tool>` (the wrapper auto-resolves Path A vs Path B\n// per cfg.tool_mode + VK presence). Kept registered so existing\n// scripts continue to work and so reviewers can find the install\n// helper from the help with `--help --all` if needed.\ningestCmd\n .command(\"install <tool>\", { hidden: true })\n .description(\n \"Hidden: low-level Path B install primitive. Normal users run `langwatch <tool>` which auto-installs when needed.\",\n )\n .option(\"--env-only\", \"skip the codex config.toml write; print exports only\")\n .option(\"--json\", \"emit machine-readable JSON\")\n .action(\n async (\n tool: string,\n options: { envOnly?: boolean; json?: boolean },\n ) => {\n const { installCommand } = await import(\n \"./commands/ingestion/install.js\"\n );\n await installCommand(tool, options);\n },\n );\n\nconst governanceCmd = program\n .command(\"governance\")\n .description(\n \"Manage governance resources (ingestion templates) from the CLI. Mirrors the public REST surface at /api/governance/* — every mutating call lands an audit row with metadata.surface='cli'.\",\n );\n\ngovernanceCmd\n .command(\"status\")\n .description(\"Show the org's governance setup-state OR-of-flags (mirrors api.governance.setupState).\")\n .option(\"--json\", \"emit machine-readable JSON\")\n .action(async (options: { json?: boolean }) => {\n try {\n const { governanceStatusCommand } = await import(\"./commands/governance/status.js\");\n await governanceStatusCommand(options);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\n// ── Ingestion templates (admin/platform-curated catalog) ──────────────────\n\nconst templatesCmd = governanceCmd\n .command(\"ingestion-templates\")\n .description(\"CRUD on IngestionTemplate rows. Reads use aiTools:view; mutations use aiTools:manage.\");\n\ntemplatesCmd\n .command(\"admin-list\")\n .description(\"Admin readonly catalog — includes ottl_rules. Requires aiTools:manage.\")\n .option(\"--json\", \"emit machine-readable JSON\")\n .action(async (options: { json?: boolean }) => {\n const { adminListCommand } = await import(\n \"./commands/governance/ingestion-templates.js\"\n );\n await adminListCommand(options);\n });\n\ntemplatesCmd\n .command(\"get <id>\")\n .description(\"Fetch a single ingestion template by id.\")\n .option(\"--json\", \"emit machine-readable JSON\")\n .action(async (id: string, options: { json?: boolean }) => {\n const { getCommand } = await import(\n \"./commands/governance/ingestion-templates.js\"\n );\n await getCommand(id, options);\n });\n\ntemplatesCmd\n .command(\"create\")\n .description(\"Author a new org-authored ingestion template.\")\n .requiredOption(\"--source-type <slug>\", \"lowercase letters/digits/underscores, max 40 chars\")\n .requiredOption(\"--display-name <name>\", \"human-readable label\")\n .option(\"--description <text>\", \"optional description\")\n .option(\"--icon-asset <asset>\", \"preset:<kind> | data:image/svg+xml;base64,...\")\n .option(\n \"--credential-schema <kind>\",\n \"otlp_token | static_api_key | agent_id (defaults to otlp_token)\",\n )\n .option(\"--ottl-rules <text>\", \"OTTL rules (newline-separated statements)\")\n .option(\"--json\", \"emit machine-readable JSON\")\n .action(\n async (options: {\n sourceType: string;\n displayName: string;\n description?: string;\n iconAsset?: string;\n credentialSchema?: string;\n ottlRules?: string;\n json?: boolean;\n }) => {\n const { createCommand } = await import(\n \"./commands/governance/ingestion-templates.js\"\n );\n await createCommand(options);\n },\n );\n\ntemplatesCmd\n .command(\"update-ottl-rules <id>\")\n .description(\"Replace ottl_rules on an org-authored template. Platform rows reject.\")\n .requiredOption(\"--ottl-rules <text>\", \"OTTL rules (newline-separated statements)\")\n .option(\"--json\", \"emit machine-readable JSON\")\n .action(\n async (id: string, options: { ottlRules: string; json?: boolean }) => {\n const { updateOttlRulesCommand } = await import(\n \"./commands/governance/ingestion-templates.js\"\n );\n await updateOttlRulesCommand(id, options);\n },\n );\n\ntemplatesCmd\n .command(\"archive <id>\")\n .description(\"Soft-archive an org-authored template. Platform rows reject.\")\n .option(\"--json\", \"emit machine-readable JSON\")\n .action(async (id: string, options: { json?: boolean }) => {\n const { archiveCommand } = await import(\n \"./commands/governance/ingestion-templates.js\"\n );\n await archiveCommand(id, options);\n });\n\ntemplatesCmd\n .command(\"clone-from-platform <sourceTemplateId>\")\n .description(\"Clone a platform-published template into the caller's org for OTTL customisation.\")\n .option(\"--json\", \"emit machine-readable JSON\")\n .action(\n async (sourceTemplateId: string, options: { json?: boolean }) => {\n const { cloneFromPlatformCommand } = await import(\n \"./commands/governance/ingestion-templates.js\"\n );\n await cloneFromPlatformCommand(sourceTemplateId, options);\n },\n );\n\n// Add prompt command group\nconst promptCmd = program\n .command(\"prompt\")\n .description(\"Manage prompt dependencies\");\n\npromptCmd\n .command(\"init\")\n .description(\"Initialize a new prompts project\")\n .action(async () => {\n try {\n await initCommand();\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\npromptCmd\n .command(\"create <name>\")\n .description(\"Create a new prompt YAML file with default content\")\n .action(async (name: string) => {\n try {\n await createCommand(name, {});\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\npromptCmd\n .command(\"add <spec> [localFile]\")\n .description(\"Add a prompt dependency (e.g., 'agent/foo', 'agent/bar@5') or local file\")\n .action(async (spec: string, localFile?: string) => {\n try {\n if (localFile) {\n await addCommand(spec, { localFile });\n } else {\n const { name, version } = parsePromptSpec(spec);\n await addCommand(name, { version });\n }\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\npromptCmd\n .command(\"remove <name>\")\n .description(\"Remove a prompt dependency\")\n .action(async (name: string) => {\n try {\n await removeCommand(name);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\npromptCmd\n .command(\"list\")\n .description(\"List all available prompts on the server\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (options: { format?: string }) => {\n try {\n await listCommand(options);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\npromptCmd\n .command(\"sync\")\n .description(\"Sync prompts - fetch remote and push local\")\n .action(async () => {\n try {\n await syncCommand();\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\npromptCmd\n .command(\"pull\")\n .description(\"Pull remote prompts and materialize locally\")\n .option(\"--tag <name>\", \"Pull the version pointed to by this tag instead of the configured version\")\n .action(async (options: { tag?: string }) => {\n try {\n await pullCommand(options);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\npromptCmd\n .command(\"push\")\n .description(\"Push local prompts to the server\")\n .option(\"--force-local\", \"Auto-resolve conflicts by keeping local version\")\n .option(\"--force-remote\", \"Auto-resolve conflicts by keeping remote version\")\n .action(async (options: { forceLocal?: boolean; forceRemote?: boolean }) => {\n try {\n await pushCommand({ forceLocal: options.forceLocal, forceRemote: options.forceRemote });\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\npromptCmd\n .command(\"versions <handle>\")\n .description(\"List all versions of a prompt\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (handle: string, options: { format?: string }) => {\n const { promptVersionsCommand: impl } = await import(\"./commands/prompt/versions.js\");\n await impl(handle, options);\n });\n\npromptCmd\n .command(\"restore <handle> <versionId>\")\n .description(\"Restore a prompt to a previous version (creates a new version with that config)\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (handle: string, versionId: string, options: { format?: string }) => {\n const { promptRestoreCommand: impl } = await import(\"./commands/prompt/restore.js\");\n await impl(handle, versionId, options);\n });\n\n// Add prompt tag subcommand group\nconst tagCmd = promptCmd\n .command(\"tag\")\n .description(\"Manage prompt tags\");\n\ntagCmd\n .command(\"list\")\n .description(\"List all tag definitions for the organization\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (options: { format?: string }) => {\n try {\n await tagListCommand(options);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\ntagCmd\n .command(\"create <name>\")\n .description(\"Create a custom tag\")\n .action(async (name: string) => {\n try {\n await tagCreateCommand(name);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\ntagCmd\n .command(\"rename <oldName> <newName>\")\n .description(\"Rename a tag\")\n .action(async (oldName: string, newName: string) => {\n try {\n await tagRenameCommand(oldName, newName);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\ntagCmd\n .command(\"assign <prompt> <tag>\")\n .description(\"Assign a tag to a prompt version\")\n .option(\"--version <number>\", \"Version number to assign (defaults to latest)\")\n .action(async (prompt: string, tag: string, options: { version?: string }) => {\n try {\n await tagAssignCommand(prompt, tag, options);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\ntagCmd\n .command(\"delete <name>\")\n .description(\"Delete a tag and remove all its assignments\")\n .option(\"--force\", \"Skip confirmation prompt\")\n .action(async (name: string, options: { force?: boolean }) => {\n try {\n await tagDeleteCommand(name, options);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\n// Status command - project overview\nprogram\n .command(\"status\")\n .description(\"Show project resource counts and available commands\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (options: { format?: string }) => {\n const { statusCommand: impl } = await import(\"./commands/status.js\");\n await impl(options);\n });\n\n// Docs commands - fetch markdown documentation for LangWatch and Scenario\nprogram\n .command(\"docs [url]\")\n .description(\n \"Fetch LangWatch documentation as markdown. Pass no argument for the index (llms.txt), a path like 'integration/python/guide', or a full URL. Missing extensions default to .md.\",\n )\n .action(async (url?: string) => {\n try {\n const { docsCommand: impl } = await import(\"./commands/docs.js\");\n await impl(url);\n } catch (error) {\n console.error(`Error: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n process.exit(1);\n }\n });\n\nprogram\n .command(\"scenario-docs [url]\")\n .description(\n \"Fetch LangWatch Scenario documentation as markdown. Pass no argument for the index, a path like 'advanced/red-teaming', or a full URL. Missing extensions default to .md.\",\n )\n .action(async (url?: string) => {\n try {\n const { scenarioDocsCommand: impl } = await import(\"./commands/docs.js\");\n await impl(url);\n } catch (error) {\n console.error(`Error: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n process.exit(1);\n }\n });\n\n// Add evaluator command group\nconst evaluatorCmd = program\n .command(\"evaluator\")\n .description(\"Manage evaluator definitions\");\n\nevaluatorCmd\n .command(\"list\")\n .description(\"List all evaluators in the project\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (options: { format?: string }) => {\n try {\n await listEvaluatorsCommand(options);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\nevaluatorCmd\n .command(\"get <idOrSlug>\")\n .description(\"Get evaluator details by ID or slug\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (idOrSlug: string, options: { format?: string }) => {\n try {\n await getEvaluatorCommand(idOrSlug, options);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\nevaluatorCmd\n .command(\"create <name>\")\n .description(\"Create a new evaluator\")\n .requiredOption(\"--type <evaluatorType>\", \"Evaluator type (e.g. langevals/llm_judge)\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (name: string, options: { type: string; format?: string }) => {\n try {\n await createEvaluatorCommand(name, options);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\nevaluatorCmd\n .command(\"update <idOrSlug>\")\n .description(\"Update an evaluator name or settings\")\n .option(\"--name <name>\", \"New evaluator name\")\n .option(\"--settings <json>\", \"Evaluator config settings as JSON\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (idOrSlug: string, options: { name?: string; settings?: string; format?: string }) => {\n try {\n await updateEvaluatorCommand(idOrSlug, options);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\nevaluatorCmd\n .command(\"delete <idOrSlug>\")\n .description(\"Archive (soft-delete) an evaluator\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (idOrSlug: string, options: { format?: string }) => {\n try {\n await deleteEvaluatorCommand(idOrSlug, options);\n } catch (error) {\n console.error(`Error: ${formatApiErrorMessage({ error })}`);\n process.exit(1);\n }\n });\n\n// Add experiment command group — run, monitor, list, and inspect experiments\nconst experimentCmd = program\n .command(\"experiment\")\n .description(\"Run, monitor, list, and inspect experiments\");\n\nexperimentCmd\n .command(\"list\")\n .description(\"List experiments in the project\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .option(\"--limit <n>\", \"Maximum experiments to fetch (default 50, max 200)\", \"50\")\n .action(async (options: { format?: string; limit?: string }) => {\n await experimentListCommand(options);\n });\n\nexperimentCmd\n .command(\"run <slug>\")\n .description(\"Start an experiment run by slug\")\n .option(\"--wait\", \"Wait for the experiment to complete before returning\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (slug: string, options: { wait?: boolean; format?: string }) => {\n const { runExperimentCommand: impl } = await import(\"./commands/experiment/run.js\");\n await impl(slug, options);\n });\n\nexperimentCmd\n .command(\"status <experiment>\")\n .description(\"Check the status of an experiment run (defaults to the latest run)\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .option(\"--run-id <id>\", \"Specific run id to check (defaults to the latest run)\")\n .action(async (experiment: string, options: { format?: string; runId?: string }) => {\n const { experimentStatusCommand: impl } = await import(\"./commands/experiment/status.js\");\n await impl(experiment, options);\n });\n\nexperimentCmd\n .command(\"list-runs <experiment>\")\n .description(\"List experiment runs for an experiment by slug\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .option(\"--limit <n>\", \"Maximum runs to fetch (default 50, max 200)\", \"50\")\n .action(\n async (\n experiment: string,\n options: {\n format?: string;\n limit?: string;\n },\n ) => {\n await experimentListRunsCommand({ experiment, ...options });\n },\n );\n\nexperimentCmd\n .command(\"results <experiment>\")\n .description(\n \"Fetch per-row results for an experiment run, defaulting to the latest run (debug evaluator scores and missed rows)\",\n )\n .option(\"--run-id <id>\", \"Specific run id to fetch (defaults to the latest run)\")\n .option(\"--filter <filter>\", \"Filter rows: failed | all (default)\", \"all\")\n .option(\"--evaluator <name>\", \"Show only this evaluator's column\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .option(\"--limit <n>\", \"Maximum rows to print in table mode (default 20)\", \"20\")\n .action(\n async (\n experiment: string,\n options: {\n runId?: string;\n filter?: string;\n evaluator?: string;\n format?: string;\n limit?: string;\n },\n ) => {\n await experimentResultsCommand({ experimentSlug: experiment, options });\n },\n );\n\n\n// Add workflow command group\nconst workflowCmd = program\n .command(\"workflow\")\n .description(\"Manage workflows\");\n\nworkflowCmd\n .command(\"list\")\n .description(\"List all workflows in the project\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (options: { format?: string }) => {\n const { listWorkflowsCommand: impl } = await import(\"./commands/workflows/list.js\");\n await impl(options);\n });\n\nworkflowCmd\n .command(\"get <id>\")\n .description(\"Get workflow details by ID\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { format?: string }) => {\n const { getWorkflowCommand: impl } = await import(\"./commands/workflows/get.js\");\n await impl(id, options);\n });\n\nworkflowCmd\n .command(\"update <id>\")\n .description(\"Update a workflow's metadata (name, icon, description)\")\n .option(\"--name <name>\", \"New workflow name\")\n .option(\"--icon <icon>\", \"New workflow icon\")\n .option(\"--description <desc>\", \"New workflow description\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { name?: string; icon?: string; description?: string; format?: string }) => {\n const { updateWorkflowCommand: impl } = await import(\"./commands/workflows/update.js\");\n await impl(id, options);\n });\n\nworkflowCmd\n .command(\"run <id>\")\n .description(\"Execute a workflow with JSON input\")\n .option(\"--input <json>\", \"Input data as JSON string\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { input?: string; format?: string }) => {\n const { runWorkflowCommand: impl } = await import(\"./commands/workflows/run.js\");\n await impl(id, options);\n });\n\nworkflowCmd\n .command(\"delete <id>\")\n .description(\"Archive (soft-delete) a workflow\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { format?: string }) => {\n const { deleteWorkflowCommand: impl } = await import(\"./commands/workflows/delete.js\");\n await impl(id, options);\n });\n\n// Add agent command group\nconst agentCmd = program\n .command(\"agent\")\n .description(\"Manage agent definitions\");\n\nagentCmd\n .command(\"list\")\n .description(\"List all agents in the project\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (options: { format?: string }) => {\n const { listAgentsCommand: impl } = await import(\"./commands/agents/list.js\");\n await impl(options);\n });\n\nagentCmd\n .command(\"get <id>\")\n .description(\"Get agent details by ID\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { format?: string }) => {\n const { getAgentCommand: impl } = await import(\"./commands/agents/get.js\");\n await impl(id, options);\n });\n\nagentCmd\n .command(\"create <name>\")\n .description(\"Create a new agent\")\n .requiredOption(\"--type <type>\", \"Agent type: signature, code, workflow, or http\")\n .option(\"--config <json>\", \"Agent config as JSON\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (name: string, options: { type: string; config?: string; format?: string }) => {\n const { createAgentCommand: impl } = await import(\"./commands/agents/create.js\");\n await impl(name, options);\n });\n\nagentCmd\n .command(\"run <id>\")\n .description(\"Execute an agent with JSON input (HTTP agents call URL directly, others use workflow engine)\")\n .option(\"--input <json>\", \"Input data as JSON string\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { input?: string; format?: string }) => {\n const { runAgentCommand: impl } = await import(\"./commands/agents/run.js\");\n await impl(id, options);\n });\n\nagentCmd\n .command(\"update <id>\")\n .description(\"Update an agent name, type, or configuration\")\n .option(\"--name <name>\", \"New agent name\")\n .option(\"--type <type>\", \"New agent type: signature, code, workflow, or http\")\n .option(\"--config <json>\", \"Updated configuration as JSON\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { name?: string; type?: string; config?: string; format?: string }) => {\n const { updateAgentCommand: impl } = await import(\"./commands/agents/update.js\");\n await impl(id, options);\n });\n\nagentCmd\n .command(\"delete <id>\")\n .description(\"Archive (soft-delete) an agent\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { format?: string }) => {\n const { deleteAgentCommand: impl } = await import(\"./commands/agents/delete.js\");\n await impl(id, options);\n });\n\n// Add dashboard command group\nconst dashboardCmd = program\n .command(\"dashboard\")\n .description(\"Manage analytics dashboards\");\n\ndashboardCmd\n .command(\"list\")\n .description(\"List all dashboards in the project\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (options: { format?: string }) => {\n const { listDashboardsCommand: impl } = await import(\"./commands/dashboards/list.js\");\n await impl(options);\n });\n\ndashboardCmd\n .command(\"get <id>\")\n .description(\"Get dashboard details by ID\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { format?: string }) => {\n const { getDashboardCommand: impl } = await import(\"./commands/dashboards/get.js\");\n await impl(id, options);\n });\n\ndashboardCmd\n .command(\"update <id>\")\n .description(\"Rename a dashboard\")\n .requiredOption(\"--name <name>\", \"New dashboard name\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { name?: string; format?: string }) => {\n const { updateDashboardCommand: impl } = await import(\"./commands/dashboards/update.js\");\n await impl(id, options);\n });\n\ndashboardCmd\n .command(\"create <name>\")\n .description(\"Create a new dashboard\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (name: string, options: { format?: string }) => {\n const { createDashboardCommand: impl } = await import(\"./commands/dashboards/create.js\");\n await impl(name, options);\n });\n\ndashboardCmd\n .command(\"delete <id>\")\n .description(\"Delete a dashboard and its graphs\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { format?: string }) => {\n const { deleteDashboardCommand: impl } = await import(\"./commands/dashboards/delete.js\");\n await impl(id, options);\n });\n\n// Add model-provider command group\nconst modelProviderCmd = program\n .command(\"model-provider\")\n .description(\"Manage LLM model provider configurations\");\n\nmodelProviderCmd\n .command(\"list\")\n .description(\"List all configured model providers\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (options: { format?: string }) => {\n const { listModelProvidersCommand: impl } = await import(\"./commands/model-providers/list.js\");\n await impl(options);\n });\n\nmodelProviderCmd\n .command(\"set <provider>\")\n .description(\"Configure a model provider (e.g. openai, anthropic)\")\n .option(\"--enabled <boolean>\", \"Enable or disable the provider\", (v) => v === \"true\")\n .option(\"--api-key <key>\", \"API key for the provider\")\n .option(\"--default-model <model>\", \"Default model to use (e.g. gpt-4o)\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (provider: string, options: { enabled?: boolean; apiKey?: string; defaultModel?: string; format?: string }) => {\n const { setModelProviderCommand: impl } = await import(\"./commands/model-providers/set.js\");\n await impl(provider, options);\n });\n\n// Add model-default command group (cascading default models)\nconst modelDefaultCmd = program\n .command(\"model-default\")\n .description(\n \"Manage cascading default models (per role/feature, per scope: project/team/organization)\",\n );\n\nmodelDefaultCmd\n .command(\"list\")\n .description(\"Show the effective resolution + every config you can read\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (options: { format?: string }) => {\n const { listModelDefaultsCommand: impl } = await import(\n \"./commands/model-defaults/list.js\"\n );\n await impl(options);\n });\n\nmodelDefaultCmd\n .command(\"set <key> <model>\")\n .description(\n \"Set a default model for a role (DEFAULT|FAST|EMBEDDINGS) or registered feature key. Defaults to project scope; pass --scope team|organization for higher tiers.\",\n )\n .option(\"--scope <scope>\", \"Scope tier: project (default), team, or organization\", \"project\")\n .option(\n \"--scope-id <id>\",\n \"Explicit scope id. Defaults to the API key's project / its team / its organization.\",\n )\n .option(\"-f, --format <format>\", \"Output format: text (default) or json\", \"text\")\n .action(\n async (\n key: string,\n model: string,\n options: { scope?: \"project\" | \"team\" | \"organization\"; scopeId?: string; format?: string },\n ) => {\n const { setModelDefaultCommand: impl } = await import(\n \"./commands/model-defaults/set.js\"\n );\n await impl(key, model, options);\n },\n );\n\nmodelDefaultCmd\n .command(\"unset <key>\")\n .description(\"Remove a default model for a role or feature key at the chosen scope\")\n .option(\"--scope <scope>\", \"Scope tier: project (default), team, or organization\", \"project\")\n .option(\n \"--scope-id <id>\",\n \"Explicit scope id. Defaults to the API key's project / its team / its organization.\",\n )\n .option(\"-f, --format <format>\", \"Output format: text (default) or json\", \"text\")\n .action(\n async (\n key: string,\n options: { scope?: \"project\" | \"team\" | \"organization\"; scopeId?: string; format?: string },\n ) => {\n const { unsetModelDefaultCommand: impl } = await import(\n \"./commands/model-defaults/unset.js\"\n );\n await impl(key, options);\n },\n );\n\n// Add virtual-keys command group (AI Gateway)\nconst virtualKeysCmd = program\n .command(\"virtual-keys\")\n .alias(\"vk\")\n .description(\"Manage AI Gateway virtual keys (list, create, rotate, revoke)\");\n\nvirtualKeysCmd\n .command(\"list\")\n .description(\"List all virtual keys for the current project\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (options: { format?: string }) => {\n const { listVirtualKeysCommand: impl } = await import(\"./commands/virtual-keys/list.js\");\n await impl(options);\n });\n\nvirtualKeysCmd\n .command(\"get <id>\")\n .description(\"Show details for a single virtual key\")\n .option(\"-f, --format <format>\", \"Output format: text (default) or json\", \"text\")\n .action(async (id: string, options: { format?: string }) => {\n const { getVirtualKeyCommand: impl } = await import(\"./commands/virtual-keys/get.js\");\n await impl(id, options);\n });\n\nvirtualKeysCmd\n .command(\"create\")\n .description(\"Create a new virtual key (secret is shown once)\")\n .requiredOption(\"--name <name>\", \"Human-readable name for the key\")\n .option(\"--description <desc>\", \"Optional description\")\n .option(\"--env <env>\", \"Environment: live or test\", \"live\")\n .option(\"--scope <typeAndId...>\", \"Scope row in TYPE:id form (repeatable). Types: ORG | TEAM | PROJECT. Example: --scope ORG:acme --scope TEAM:platform\")\n .option(\"--routing-policy <id>\", \"RoutingPolicy id to pin (otherwise uses the org's default policy)\")\n .option(\"--principal-user <userId>\", \"Mark this VK as personal and attribute spend to the named principal user\")\n .option(\"-f, --format <format>\", \"Output format: text (default) or json\", \"text\")\n .action(async (options: { name: string; description?: string; env?: \"live\" | \"test\"; scope?: string[]; routingPolicy?: string; principalUser?: string; format?: string }) => {\n const { createVirtualKeyCommand: impl } = await import(\"./commands/virtual-keys/create.js\");\n await impl(options);\n });\n\nvirtualKeysCmd\n .command(\"update <id>\")\n .description(\"Update a virtual key's name/description/scopes/routing-policy/config\")\n .option(\"--name <name>\", \"New display name\")\n .option(\"--description <desc>\", \"New description\")\n .option(\"--clear-description\", \"Clear the description\")\n .option(\"--scope <typeAndId...>\", \"Replace the scope set (repeatable; supplies the full set). Same TYPE:id form as create.\")\n .option(\"--routing-policy <id>\", \"Switch to a different RoutingPolicy (pass id)\")\n .option(\"--clear-routing-policy\", \"Unpin the routing policy; VK falls back to the org default ordering\")\n .option(\"--config-json <json>\", \"Inline partial config JSON (model_aliases/cache/fallback/rate_limits/policy_rules). Merges with existing config\")\n .option(\"--config-file <path>\", \"Read partial config JSON from a file\")\n .option(\"-f, --format <format>\", \"Output format: text (default) or json\", \"text\")\n .action(async (id: string, options: {\n name?: string;\n description?: string;\n clearDescription?: boolean;\n scope?: string[];\n routingPolicy?: string;\n clearRoutingPolicy?: boolean;\n configJson?: string;\n configFile?: string;\n format?: string;\n }) => {\n const { updateVirtualKeyCommand: impl } = await import(\"./commands/virtual-keys/update.js\");\n await impl(id, options);\n });\n\nvirtualKeysCmd\n .command(\"rotate <id>\")\n .description(\"Rotate a virtual key's secret (old secret stops working immediately)\")\n .option(\"-f, --format <format>\", \"Output format: text (default) or json\", \"text\")\n .action(async (id: string, options: { format?: string }) => {\n const { rotateVirtualKeyCommand: impl } = await import(\"./commands/virtual-keys/rotate.js\");\n await impl(id, options);\n });\n\nvirtualKeysCmd\n .command(\"revoke <id>\")\n .description(\"Revoke a virtual key (cannot be reactivated)\")\n .option(\"-f, --format <format>\", \"Output format: text (default) or json\", \"text\")\n .action(async (id: string, options: { format?: string }) => {\n const { revokeVirtualKeyCommand: impl } = await import(\"./commands/virtual-keys/revoke.js\");\n await impl(id, options);\n });\n\n// Add gateway-budgets command group (AI Gateway)\nconst gatewayBudgetsCmd = program\n .command(\"gateway-budgets\")\n .description(\"Manage AI Gateway spend budgets (hierarchical scopes)\");\n\ngatewayBudgetsCmd\n .command(\"list\")\n .description(\"List all budgets across scopes\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (options: { format?: string }) => {\n const { listGatewayBudgetsCommand: impl } = await import(\"./commands/gateway-budgets/list.js\");\n await impl(options);\n });\n\ngatewayBudgetsCmd\n .command(\"create\")\n .description(\"Create a new budget (scope + window + limit)\")\n .requiredOption(\"--name <name>\", \"Human-readable budget name\")\n .option(\"--description <desc>\", \"Optional description\")\n .requiredOption(\"--scope <kind>\", \"Budget scope: organization|team|project|virtual-key|principal\")\n .option(\"--organization <id>\", \"Organization id (for scope=organization)\")\n .option(\"--team <id>\", \"Team id (for scope=team)\")\n .option(\"--project <id>\", \"Project id (for scope=project)\")\n .option(\"--virtual-key <id>\", \"Virtual key id (for scope=virtual-key)\")\n .option(\"--principal <id>\", \"Principal user id (for scope=principal)\")\n .requiredOption(\"--window <w>\", \"Budget window: minute|hour|day|week|month|total\")\n .requiredOption(\"--limit <usd>\", \"Hard cap in USD (e.g. 100 or 49.99)\")\n .option(\"--on-breach <action>\", \"block (default) or warn\", \"block\")\n .option(\"--timezone <tz>\", \"IANA timezone for window boundaries (e.g. Europe/Amsterdam)\")\n .option(\"-f, --format <format>\", \"Output format: text (default) or json\", \"text\")\n .action(async (options: {\n name: string;\n description?: string;\n scope: \"organization\" | \"team\" | \"project\" | \"virtual-key\" | \"principal\";\n organization?: string;\n team?: string;\n project?: string;\n virtualKey?: string;\n principal?: string;\n window: string;\n limit: string;\n onBreach?: \"block\" | \"warn\";\n timezone?: string;\n format?: string;\n }) => {\n const { createGatewayBudgetCommand: impl } = await import(\"./commands/gateway-budgets/create.js\");\n await impl(options);\n });\n\ngatewayBudgetsCmd\n .command(\"update <id>\")\n .description(\"Update a budget's name/description/limit/on-breach/timezone\")\n .option(\"--name <name>\", \"New display name\")\n .option(\"--description <desc>\", \"New description\")\n .option(\"--clear-description\", \"Clear the description\")\n .option(\"--limit <usd>\", \"New hard-cap in USD\")\n .option(\"--on-breach <action>\", \"block or warn\")\n .option(\"--timezone <tz>\", \"New IANA timezone\")\n .option(\"--clear-timezone\", \"Clear the timezone override\")\n .option(\"-f, --format <format>\", \"Output format: text (default) or json\", \"text\")\n .action(async (id: string, options: {\n name?: string;\n description?: string;\n clearDescription?: boolean;\n limit?: string;\n onBreach?: \"block\" | \"warn\";\n timezone?: string;\n clearTimezone?: boolean;\n format?: string;\n }) => {\n const { updateGatewayBudgetCommand: impl } = await import(\"./commands/gateway-budgets/update.js\");\n await impl(id, options);\n });\n\ngatewayBudgetsCmd\n .command(\"archive <id>\")\n .description(\"Archive a budget (stops enforcement; does not delete history)\")\n .option(\"-f, --format <format>\", \"Output format: text (default) or json\", \"text\")\n .action(async (id: string, options: { format?: string }) => {\n const { archiveGatewayBudgetCommand: impl } = await import(\"./commands/gateway-budgets/archive.js\");\n await impl(id, options);\n });\n\n// Add annotation command group\nconst annotationCmd = program\n .command(\"annotation\")\n .description(\"Manage trace annotations\");\n\nannotationCmd\n .command(\"list\")\n .description(\"List all annotations (optionally filtered by trace)\")\n .option(\"--trace-id <traceId>\", \"Filter by trace ID\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (options: { traceId?: string; format?: string }) => {\n const { listAnnotationsCommand: impl } = await import(\"./commands/annotations/list.js\");\n await impl(options);\n });\n\nannotationCmd\n .command(\"get <id>\")\n .description(\"Get annotation details by ID\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { format?: string }) => {\n const { getAnnotationCommand: impl } = await import(\"./commands/annotations/get.js\");\n await impl(id, options);\n });\n\nannotationCmd\n .command(\"create <traceId>\")\n .description(\"Create an annotation for a trace\")\n .option(\"--comment <comment>\", \"Annotation comment\")\n .option(\"--thumbs-up\", \"Mark as thumbs up\")\n .option(\"--thumbs-down\", \"Mark as thumbs down\")\n .option(\"--email <email>\", \"Email of the annotator\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (traceId: string, options: { comment?: string; thumbsUp?: boolean; thumbsDown?: boolean; email?: string; format?: string }) => {\n const { createAnnotationCommand: impl } = await import(\"./commands/annotations/create.js\");\n await impl(traceId, options);\n });\n\nannotationCmd\n .command(\"delete <id>\")\n .description(\"Delete an annotation\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { format?: string }) => {\n const { deleteAnnotationCommand: impl } = await import(\"./commands/annotations/delete.js\");\n await impl(id, options);\n });\n\n// Add analytics command group\nconst analyticsCmd = program\n .command(\"analytics\")\n .description(\"Query analytics and metrics\");\n\nanalyticsCmd\n .command(\"query\")\n .description(\"Query timeseries analytics (costs, latency, token usage, etc.)\")\n .option(\"-m, --metric <metric>\", \"Metric to query (preset name or raw metric path, default: trace-count)\")\n .option(\"-a, --aggregation <aggregation>\", \"Aggregation type: cardinality, avg, sum, min, max, p95, p99\")\n .option(\"--start-date <date>\", \"Start date (ISO string, default: 7 days ago)\")\n .option(\"--end-date <date>\", \"End date (ISO string, default: now)\")\n .option(\"--group-by <field>\", \"Group by field (e.g. metadata.model)\")\n .option(\"--time-scale <scale>\", \"Time scale: 'full' for aggregate, or interval in seconds\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (options: { metric?: string; aggregation?: string; startDate?: string; endDate?: string; groupBy?: string; timeScale?: string; format?: string }) => {\n const { queryAnalyticsCommand: impl } = await import(\"./commands/analytics/query.js\");\n await impl(options);\n });\n\n// Add trace command group\nconst traceCmd = program\n .command(\"trace\")\n .description(\"Search and inspect traces\");\n\ntraceCmd\n .command(\"search\")\n .description(\"Search traces with optional text query and date range\")\n .option(\"-q, --query <query>\", \"Text search query\")\n .option(\"--start-date <date>\", \"Start date (ISO string or epoch ms, default: 24h ago)\")\n .option(\"--end-date <date>\", \"End date (ISO string or epoch ms, default: now)\")\n .option(\"--limit <n>\", \"Max results to return (default: 25)\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (options: { query?: string; startDate?: string; endDate?: string; limit?: string; format?: string }) => {\n const { searchTracesCommand: impl } = await import(\"./commands/traces/search.js\");\n await impl(options);\n });\n\ntraceCmd\n .command(\"export\")\n .description(\"Export traces as CSV, JSONL, or JSON\")\n .option(\"--start-date <date>\", \"Start date (ISO string, default: 7 days ago)\")\n .option(\"--end-date <date>\", \"End date (ISO string, default: now)\")\n .option(\"-q, --query <query>\", \"Text search query to filter traces\")\n .option(\"-f, --format <format>\", \"Output format: jsonl (default), csv, or json\", \"jsonl\")\n .option(\"-o, --output <file>\", \"Write output to file instead of stdout\")\n .option(\"--limit <n>\", \"Max traces to export (default: 1000)\")\n .action(async (options: { startDate?: string; endDate?: string; query?: string; format?: string; output?: string; limit?: string }) => {\n const { exportTracesCommand: impl } = await import(\"./commands/traces/export.js\");\n await impl(options);\n });\n\ntraceCmd\n .command(\"get <traceId>\")\n .description(\"Get full trace details by ID\")\n .option(\"-f, --format <format>\", \"Output format: digest (default, human-readable) or json\", \"digest\")\n .action(async (traceId: string, options: { format?: string }) => {\n const { getTraceCommand: impl } = await import(\"./commands/traces/get.js\");\n await impl(traceId, options);\n });\n\n// Add scenario command group\nconst scenarioCmd = program\n .command(\"scenario\")\n .description(\"Manage scenarios\");\n\nscenarioCmd\n .command(\"list\")\n .description(\"List all scenarios in the project\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (options: { format?: string }) => {\n const { listScenariosCommand: impl } = await import(\"./commands/scenarios/list.js\");\n await impl(options);\n });\n\nscenarioCmd\n .command(\"get <id>\")\n .description(\"Get scenario details by ID\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { format?: string }) => {\n const { getScenarioCommand: impl } = await import(\"./commands/scenarios/get.js\");\n await impl(id, options);\n });\n\nscenarioCmd\n .command(\"create <name>\")\n .description(\"Create a new scenario\")\n .requiredOption(\"--situation <situation>\", \"The situation/context for the scenario\")\n .option(\"--criteria <criteria>\", \"Comma-separated list of evaluation criteria\")\n .option(\"--labels <labels>\", \"Comma-separated list of labels\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (name: string, options: { situation: string; criteria?: string; labels?: string; format?: string }) => {\n const { createScenarioCommand: impl } = await import(\"./commands/scenarios/create.js\");\n await impl(name, options);\n });\n\nscenarioCmd\n .command(\"update <id>\")\n .description(\"Update an existing scenario\")\n .option(\"--name <name>\", \"New scenario name\")\n .option(\"--situation <situation>\", \"New situation/context\")\n .option(\"--criteria <criteria>\", \"New comma-separated list of criteria (replaces existing)\")\n .option(\"--labels <labels>\", \"New comma-separated list of labels (replaces existing)\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { name?: string; situation?: string; criteria?: string; labels?: string; format?: string }) => {\n const { updateScenarioCommand: impl } = await import(\"./commands/scenarios/update.js\");\n await impl(id, options);\n });\n\nscenarioCmd\n .command(\"run <id>\")\n .description(\"Run a scenario against a target (agent or prompt)\")\n .requiredOption(\"--target <target>\", \"Target to run against, as <type>:<referenceId> (e.g., http:agent_abc123)\")\n .option(\"--wait\", \"Wait for the scenario run to complete\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { target: string; wait?: boolean; format?: string }) => {\n const { runScenarioCommand: impl } = await import(\"./commands/scenarios/run.js\");\n await impl(id, options);\n });\n\nscenarioCmd\n .command(\"delete <id>\")\n .description(\"Archive (soft-delete) a scenario\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { format?: string }) => {\n const { deleteScenarioCommand: impl } = await import(\"./commands/scenarios/delete.js\");\n await impl(id, options);\n });\n\n// Add suite (run plan) command group\nconst suiteCmd = program\n .command(\"suite\")\n .description(\"Manage suites (run plans) — scenario × target execution plans\");\n\nsuiteCmd\n .command(\"list\")\n .description(\"List all suites in the project\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (options: { format?: string }) => {\n const { listSuitesCommand: impl } = await import(\"./commands/suites/list.js\");\n await impl(options);\n });\n\nsuiteCmd\n .command(\"get <id>\")\n .description(\"Get suite details by ID\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { format?: string }) => {\n const { getSuiteCommand: impl } = await import(\"./commands/suites/get.js\");\n await impl(id, options);\n });\n\nsuiteCmd\n .command(\"create <name>\")\n .description(\"Create a new suite (run plan)\")\n .requiredOption(\"--scenarios <ids>\", \"Comma-separated scenario IDs\")\n .requiredOption(\"--targets <targets...>\", \"Targets as <type>:<referenceId> (e.g., http:agent_abc)\")\n .option(\"--repeat-count <n>\", \"Number of times to repeat each scenario-target pair\", \"1\")\n .option(\"--labels <labels>\", \"Comma-separated labels\")\n .option(\"--description <desc>\", \"Suite description\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (name: string, options: { scenarios?: string; targets?: string[]; repeatCount?: string; labels?: string; description?: string; format?: string }) => {\n const { createSuiteCommand: impl } = await import(\"./commands/suites/create.js\");\n await impl(name, options);\n });\n\nsuiteCmd\n .command(\"update <id>\")\n .description(\"Update a suite (run plan)\")\n .option(\"--name <name>\", \"New suite name\")\n .option(\"--scenarios <ids>\", \"New comma-separated scenario IDs\")\n .option(\"--targets <targets...>\", \"New targets as <type>:<referenceId>\")\n .option(\"--repeat-count <n>\", \"New repeat count\")\n .option(\"--labels <labels>\", \"New comma-separated labels\")\n .option(\"--description <desc>\", \"New description\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { name?: string; scenarios?: string; targets?: string[]; repeatCount?: string; labels?: string; description?: string; format?: string }) => {\n const { updateSuiteCommand: impl } = await import(\"./commands/suites/update.js\");\n await impl(id, options);\n });\n\nsuiteCmd\n .command(\"duplicate <id>\")\n .description(\"Duplicate a suite\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { format?: string }) => {\n const { duplicateSuiteCommand: impl } = await import(\"./commands/suites/duplicate.js\");\n await impl(id, options);\n });\n\nsuiteCmd\n .command(\"run <id>\")\n .description(\"Execute a suite run — schedules all scenario × target × repeat jobs\")\n .option(\"--wait\", \"Wait for the suite run to complete before returning\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { wait?: boolean; format?: string }) => {\n const { runSuiteCommand: impl } = await import(\"./commands/suites/run.js\");\n await impl(id, options);\n });\n\nsuiteCmd\n .command(\"delete <id>\")\n .description(\"Archive (soft-delete) a suite\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { format?: string }) => {\n const { deleteSuiteCommand: impl } = await import(\"./commands/suites/delete.js\");\n await impl(id, options);\n });\n\n// Add graph command group\nconst graphCmd = program\n .command(\"graph\")\n .description(\"Manage custom graphs on dashboards\");\n\ngraphCmd\n .command(\"list\")\n .description(\"List all custom graphs (optionally filter by dashboard)\")\n .option(\"--dashboard-id <id>\", \"Filter by dashboard ID\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (options: { dashboardId?: string; format?: string }) => {\n const { listGraphsCommand: impl } = await import(\"./commands/graphs/list.js\");\n await impl(options);\n });\n\ngraphCmd\n .command(\"get <id>\")\n .description(\"Get a custom graph by ID\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { format?: string }) => {\n const { getGraphCommand: impl } = await import(\"./commands/graphs/get.js\");\n await impl(id, options);\n });\n\ngraphCmd\n .command(\"create <name>\")\n .description(\"Create a custom graph\")\n .option(\"--dashboard-id <id>\", \"Dashboard to add the graph to\")\n .option(\"--graph <json>\", \"Graph definition as JSON\")\n .option(\"--filters <json>\", \"Filter conditions as JSON\")\n .option(\"--col-span <n>\", \"Column span (1-2)\")\n .option(\"--row-span <n>\", \"Row span (1-2)\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (name: string, options: { dashboardId?: string; graph?: string; filters?: string; colSpan?: string; rowSpan?: string; format?: string }) => {\n const { createGraphCommand: impl } = await import(\"./commands/graphs/create.js\");\n await impl(name, options);\n });\n\ngraphCmd\n .command(\"update <id>\")\n .description(\"Update a custom graph\")\n .option(\"--name <name>\", \"New graph name\")\n .option(\"--graph <json>\", \"New graph definition as JSON\")\n .option(\"--filters <json>\", \"New filter conditions as JSON\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { name?: string; graph?: string; filters?: string; format?: string }) => {\n const { updateGraphCommand: impl } = await import(\"./commands/graphs/update.js\");\n await impl(id, options);\n });\n\ngraphCmd\n .command(\"delete <id>\")\n .description(\"Delete a custom graph\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { format?: string }) => {\n const { deleteGraphCommand: impl } = await import(\"./commands/graphs/delete.js\");\n await impl(id, options);\n });\n\n// Add trigger (automation) command group\nconst triggerCmd = program\n .command(\"trigger\")\n .description(\"Manage triggers (automations) — alerts, webhooks, and dataset actions\");\n\ntriggerCmd\n .command(\"list\")\n .description(\"List all triggers in the project\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (options: { format?: string }) => {\n const { listTriggersCommand: impl } = await import(\"./commands/triggers/list.js\");\n await impl(options);\n });\n\ntriggerCmd\n .command(\"get <id>\")\n .description(\"Get trigger details by ID\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { format?: string }) => {\n const { getTriggerCommand: impl } = await import(\"./commands/triggers/get.js\");\n await impl(id, options);\n });\n\ntriggerCmd\n .command(\"create <name>\")\n .description(\"Create a new trigger (automation)\")\n .requiredOption(\"--action <action>\", \"Trigger action: SEND_EMAIL, ADD_TO_DATASET, ADD_TO_ANNOTATION_QUEUE, SEND_SLACK_MESSAGE\")\n .option(\"--filters <json>\", \"Trigger filter conditions as JSON\")\n .option(\"--message <text>\", \"Custom alert message\")\n .option(\"--alert-type <type>\", \"Alert severity: CRITICAL, WARNING, INFO\")\n .option(\"--slack-webhook <url>\", \"Slack webhook URL (for SEND_SLACK_MESSAGE action)\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (name: string, options: { action: string; filters?: string; message?: string; alertType?: string; slackWebhook?: string; format?: string }) => {\n const { createTriggerCommand: impl } = await import(\"./commands/triggers/create.js\");\n await impl(name, options);\n });\n\ntriggerCmd\n .command(\"update <id>\")\n .description(\"Update a trigger\")\n .option(\"--name <name>\", \"New trigger name\")\n .option(\"--active <boolean>\", \"Enable or disable the trigger (true/false)\")\n .option(\"--message <text>\", \"New alert message\")\n .option(\"--alert-type <type>\", \"New alert severity\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { name?: string; active?: string; message?: string; alertType?: string; format?: string }) => {\n const { updateTriggerCommand: impl } = await import(\"./commands/triggers/update.js\");\n await impl(id, options);\n });\n\ntriggerCmd\n .command(\"delete <id>\")\n .description(\"Delete a trigger\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { format?: string }) => {\n const { deleteTriggerCommand: impl } = await import(\"./commands/triggers/delete.js\");\n await impl(id, options);\n });\n\n// Add secret command group\nconst secretCmd = program\n .command(\"secret\")\n .description(\"Manage project secrets — encrypted environment variables for agents\");\n\nsecretCmd\n .command(\"list\")\n .description(\"List all secrets in the project (values are never shown)\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (options: { format?: string }) => {\n const { listSecretsCommand: impl } = await import(\"./commands/secrets/list.js\");\n await impl(options);\n });\n\nsecretCmd\n .command(\"get <id>\")\n .description(\"Get secret metadata by ID (value is never shown)\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { format?: string }) => {\n const { getSecretCommand: impl } = await import(\"./commands/secrets/get.js\");\n await impl(id, options);\n });\n\nsecretCmd\n .command(\"create <name>\")\n .description(\"Create a new secret (name must be UPPER_SNAKE_CASE)\")\n .requiredOption(\"--value <value>\", \"The secret value (will be encrypted)\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (name: string, options: { value: string; format?: string }) => {\n const { createSecretCommand: impl } = await import(\"./commands/secrets/create.js\");\n await impl(name, options);\n });\n\nsecretCmd\n .command(\"update <id>\")\n .description(\"Update a secret's value\")\n .requiredOption(\"--value <value>\", \"The new secret value (will be encrypted)\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { value: string; format?: string }) => {\n const { updateSecretCommand: impl } = await import(\"./commands/secrets/update.js\");\n await impl(id, options);\n });\n\nsecretCmd\n .command(\"delete <id>\")\n .description(\"Delete a secret\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { format?: string }) => {\n const { deleteSecretCommand: impl } = await import(\"./commands/secrets/delete.js\");\n await impl(id, options);\n });\n\n// Add monitor (online evaluation) command group\nconst monitorCmd = program\n .command(\"monitor\")\n .description(\"Manage online evaluation monitors — evaluators running on incoming traces\");\n\nmonitorCmd\n .command(\"list\")\n .description(\"List all monitors in the project\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (options: { format?: string }) => {\n const { listMonitorsCommand: impl } = await import(\"./commands/monitors/list.js\");\n await impl(options);\n });\n\nmonitorCmd\n .command(\"get <id>\")\n .description(\"Get monitor details by ID\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { format?: string }) => {\n const { getMonitorCommand: impl } = await import(\"./commands/monitors/get.js\");\n await impl(id, options);\n });\n\nmonitorCmd\n .command(\"create <name>\")\n .description(\"Create a new online evaluation monitor\")\n .requiredOption(\"--check-type <type>\", \"Evaluator check type (e.g. ragas/toxicity, custom/my-eval)\")\n .option(\"--execution-mode <mode>\", \"Execution mode: ON_MESSAGE (default), AS_GUARDRAIL, MANUALLY\", \"ON_MESSAGE\")\n .option(\"--sample <rate>\", \"Sampling rate 0.0-1.0 (default: 1.0)\")\n .option(\"--evaluator-id <id>\", \"Link to a saved evaluator\")\n .option(\"--level <level>\", \"Evaluation level: trace (default) or thread\")\n .option(\"--parameters <json>\", \"Evaluator settings as JSON\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (name: string, options: { checkType: string; executionMode?: string; sample?: string; evaluatorId?: string; level?: string; parameters?: string; format?: string }) => {\n const { createMonitorCommand: impl } = await import(\"./commands/monitors/create.js\");\n await impl(name, options);\n });\n\nmonitorCmd\n .command(\"update <id>\")\n .description(\"Update a monitor\")\n .option(\"--name <name>\", \"New monitor name\")\n .option(\"--enabled <boolean>\", \"Enable or disable the monitor (true/false)\")\n .option(\"--execution-mode <mode>\", \"Execution mode: ON_MESSAGE, AS_GUARDRAIL, MANUALLY\")\n .option(\"--sample <rate>\", \"Sampling rate 0.0-1.0\")\n .option(\"--parameters <json>\", \"Updated evaluator settings as JSON\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { name?: string; enabled?: string; executionMode?: string; sample?: string; parameters?: string; format?: string }) => {\n const { updateMonitorCommand: impl } = await import(\"./commands/monitors/update.js\");\n await impl(id, options);\n });\n\nmonitorCmd\n .command(\"delete <id>\")\n .description(\"Delete a monitor\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (id: string, options: { format?: string }) => {\n const { deleteMonitorCommand: impl } = await import(\"./commands/monitors/delete.js\");\n await impl(id, options);\n });\n\n// Add simulation-run command group\nconst simulationRunCmd = program\n .command(\"simulation-run\")\n .description(\"View simulation run results\");\n\nsimulationRunCmd\n .command(\"list\")\n .description(\"List simulation runs (optionally filter by scenario set or batch)\")\n .option(\"--scenario-set-id <id>\", \"Filter by scenario set ID\")\n .option(\"--batch-run-id <id>\", \"Filter by batch run ID (requires --scenario-set-id)\")\n .option(\"--status <status>\", \"Filter by status (e.g. SUCCESS, FAILED, ERROR, IN_PROGRESS)\")\n .option(\"--name <substring>\", \"Filter by run name substring (case-insensitive)\")\n .option(\"--limit <n>\", \"Max results (default: 20)\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (options: { scenarioSetId?: string; batchRunId?: string; status?: string; name?: string; limit?: string; format?: string }) => {\n const { listSimulationRunsCommand: impl } = await import(\"./commands/simulation-runs/list.js\");\n await impl(options);\n });\n\nsimulationRunCmd\n .command(\"get <runId>\")\n .description(\"Get full details of a simulation run (messages, results, costs)\")\n .option(\"--full\", \"Show full message content instead of truncating long lines\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (runId: string, options: { format?: string; full?: boolean }) => {\n const { getSimulationRunCommand: impl } = await import(\"./commands/simulation-runs/get.js\");\n await impl(runId, options);\n });\n\n// Add dataset command group\nconst datasetCmd = program\n .command(\"dataset\")\n .description(\"Manage datasets\");\n\ndatasetCmd\n .command(\"list\")\n .description(\"List all datasets\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (options: { format?: string }) => {\n const { listCommand: listDatasetsImpl } = await import(\"./commands/dataset/list.js\");\n await listDatasetsImpl(options);\n });\n\ndatasetCmd\n .command(\"create <name>\")\n .description(\"Create a new dataset\")\n .option(\"-c, --columns <columns>\", \"Column definitions (e.g. input:string,output:string)\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (name: string, options: { columns?: string; format?: string }) => {\n const { createCommand: createDatasetImpl } = await import(\"./commands/dataset/create.js\");\n await createDatasetImpl(name, options);\n });\n\ndatasetCmd\n .command(\"get <slugOrId>\")\n .description(\"Get dataset details and preview records\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (slugOrId: string, options: { format?: string }) => {\n const { getCommand: getDatasetImpl } = await import(\"./commands/dataset/get.js\");\n await getDatasetImpl(slugOrId, options);\n });\n\ndatasetCmd\n .command(\"delete <slugOrId>\")\n .description(\"Delete (archive) a dataset\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (slugOrId: string, options: { format?: string }) => {\n const { deleteCommand: deleteDatasetImpl } = await import(\"./commands/dataset/delete.js\");\n await deleteDatasetImpl(slugOrId, options);\n });\n\ndatasetCmd\n .command(\"upload <slug> <file>\")\n .description(\"Upload a file to a dataset (creates if not found)\")\n .option(\"--if-exists <strategy>\", \"Strategy when dataset exists: append (default), replace, error\")\n .action(async (slug: string, file: string, options: { ifExists?: string }) => {\n const { uploadCommand: uploadDatasetImpl } = await import(\"./commands/dataset/upload.js\");\n await uploadDatasetImpl(slug, file, options);\n });\n\ndatasetCmd\n .command(\"download <slugOrId>\")\n .description(\"Download dataset records as CSV or JSONL\")\n .option(\"-f, --format <format>\", \"Output format: csv or jsonl\", \"csv\")\n .action(async (slugOrId: string, options: { format?: string }) => {\n const { downloadCommand: downloadDatasetImpl } = await import(\"./commands/dataset/download.js\");\n await downloadDatasetImpl(slugOrId, options);\n });\n\ndatasetCmd\n .command(\"update <slugOrId>\")\n .description(\"Update a dataset name or columns\")\n .option(\"--name <name>\", \"New dataset name\")\n .option(\"--columns <columns>\", \"New column definitions (e.g. input:string,output:string)\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (slugOrId: string, options: { name?: string; columns?: string; format?: string }) => {\n const { updateCommand: updateDatasetImpl } = await import(\"./commands/dataset/update.js\");\n await updateDatasetImpl(slugOrId, options);\n });\n\n// Records subcommand group\nconst recordsCmd = datasetCmd\n .command(\"records\")\n .description(\"Manage dataset records\");\n\nrecordsCmd\n .command(\"list <slugOrId>\")\n .description(\"List records in a dataset\")\n .option(\"--page <n>\", \"Page number (default: 1)\")\n .option(\"--limit <n>\", \"Records per page (default: 20)\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (slugOrId: string, options: { page?: string; limit?: string; format?: string }) => {\n const { recordsListCommand } = await import(\"./commands/dataset/records-list.js\");\n await recordsListCommand(slugOrId, options);\n });\n\nrecordsCmd\n .command(\"add <slugOrId>\")\n .description(\"Add records to a dataset\")\n .option(\"--json <json>\", \"JSON array of records (inline)\")\n .option(\"--file <path>\", \"Read JSON array of records from a file\")\n .option(\"--stdin\", \"Read JSON array from stdin\")\n .action(async (slugOrId: string, options: { json?: string; file?: string; stdin?: boolean }) => {\n const { recordsAddCommand } = await import(\"./commands/dataset/records-add.js\");\n await recordsAddCommand(slugOrId, options);\n });\n\nrecordsCmd\n .command(\"update <slugOrId> <recordId>\")\n .description(\"Update a single record in a dataset\")\n .requiredOption(\"--json <json>\", \"JSON object with updated fields\")\n .action(async (slugOrId: string, recordId: string, options: { json: string }) => {\n const { recordsUpdateCommand } = await import(\"./commands/dataset/records-update.js\");\n await recordsUpdateCommand(slugOrId, recordId, options);\n });\n\nrecordsCmd\n .command(\"delete <slugOrId> <recordIds...>\")\n .description(\"Delete records from a dataset\")\n .action(async (slugOrId: string, recordIds: string[]) => {\n const { recordsDeleteCommand } = await import(\"./commands/dataset/records-delete.js\");\n await recordsDeleteCommand(slugOrId, recordIds);\n });\nconst projectsCmd = program\n .command(\"projects\")\n .description(\"Manage organization projects\");\n\nprojectsCmd\n .command(\"list\")\n .description(\"List all projects in the organization\")\n .option(\"--page <page>\", \"Page number\", \"1\")\n .option(\"--limit <limit>\", \"Items per page\", \"50\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (options: { page?: string; limit?: string; format?: string }) => {\n const { listProjectsCommand: impl } = await import(\"./commands/projects/list.js\");\n await impl({\n page: options.page ? Number(options.page) : undefined,\n limit: options.limit ? Number(options.limit) : undefined,\n format: options.format,\n });\n });\n\nprojectsCmd\n .command(\"get <id>\")\n .description(\"Show details for a project\")\n .option(\"-f, --format <format>\", \"Output format: text (default) or json\", \"text\")\n .action(async (id: string, options: { format?: string }) => {\n const { getProjectCommand: impl } = await import(\"./commands/projects/get.js\");\n await impl(id, options);\n });\n\nprojectsCmd\n .command(\"create\")\n .description(\"Create a new project (returns a one-time service API key)\")\n .requiredOption(\"--name <name>\", \"Project name\")\n .requiredOption(\"--language <lang>\", \"Programming language (e.g. python, typescript)\")\n .requiredOption(\"--framework <fw>\", \"Framework (e.g. langchain, openai, vercel-ai)\")\n .option(\"--team-id <id>\", \"Existing team ID to assign the project to\")\n .option(\"--new-team-name <name>\", \"Create a new team with this name\")\n .option(\"-f, --format <format>\", \"Output format: text (default) or json\", \"text\")\n .action(async (options: {\n name: string;\n language: string;\n framework: string;\n teamId?: string;\n newTeamName?: string;\n format?: string;\n }) => {\n const { createProjectCommand: impl } = await import(\"./commands/projects/create.js\");\n await impl(options);\n });\n\nprojectsCmd\n .command(\"update <id>\")\n .description(\"Update a project's metadata\")\n .option(\"--name <name>\", \"New project name\")\n .option(\"--language <lang>\", \"New language\")\n .option(\"--framework <fw>\", \"New framework\")\n .option(\"--pii-redaction-level <level>\", \"PII redaction: STRICT, ESSENTIAL, or DISABLED\")\n .option(\"-f, --format <format>\", \"Output format: text (default) or json\", \"text\")\n .action(async (id: string, options: {\n name?: string;\n language?: string;\n framework?: string;\n piiRedactionLevel?: \"STRICT\" | \"ESSENTIAL\" | \"DISABLED\";\n format?: string;\n }) => {\n const { updateProjectCommand: impl } = await import(\"./commands/projects/update.js\");\n await impl(id, options);\n });\n\nprojectsCmd\n .command(\"delete <id>\")\n .description(\"Archive a project (soft-delete)\")\n .option(\"-f, --format <format>\", \"Output format: text (default) or json\", \"text\")\n .action(async (id: string, options: { format?: string }) => {\n const { deleteProjectCommand: impl } = await import(\"./commands/projects/delete.js\");\n await impl(id, options);\n });\n\nconst apiKeysCmd = program\n .command(\"api-keys\")\n .description(\"Manage organization API keys\");\n\napiKeysCmd\n .command(\"list\")\n .description(\"List all API keys in the organization\")\n .option(\"-f, --format <format>\", \"Output format: table (default) or json\", \"table\")\n .action(async (options: { format?: string }) => {\n const { listApiKeysCommand: impl } = await import(\"./commands/api-keys/list.js\");\n await impl(options);\n });\n\napiKeysCmd\n .command(\"create\")\n .description(\"Create a new API key (token is shown once)\")\n .requiredOption(\"--name <name>\", \"Human-readable name for the key\")\n .option(\"--key-type <type>\", \"Key type: personal or service\", \"service\")\n .option(\"--description <desc>\", \"Optional description\")\n .option(\"--expires-at <date>\", \"Expiration date (ISO 8601)\")\n .option(\"--project-id <id...>\", \"Project IDs to scope the key to (service keys only, repeatable)\")\n .option(\"-f, --format <format>\", \"Output format: text (default) or json\", \"text\")\n .action(async (options: {\n name: string;\n keyType?: \"personal\" | \"service\";\n description?: string;\n expiresAt?: string;\n projectId?: string[];\n format?: string;\n }) => {\n const { createApiKeyCommand: impl } = await import(\"./commands/api-keys/create.js\");\n await impl(options);\n });\n\napiKeysCmd\n .command(\"revoke <id>\")\n .description(\"Revoke an API key (cannot be reactivated)\")\n .option(\"-f, --format <format>\", \"Output format: text (default) or json\", \"text\")\n .action(async (id: string, options: { format?: string }) => {\n const { revokeApiKeyCommand: impl } = await import(\"./commands/api-keys/revoke.js\");\n await impl(id, options);\n });\n\nprogram.parse(process.argv);\n","import chalk from \"chalk\";\nimport ora from \"ora\";\nimport {\n ExperimentsApiService,\n type ExperimentRunSummaryEntry,\n} from \"@/client-sdk/services/experiments/experiments-api.service\";\nimport { checkApiKey } from \"../../utils/apiKey\";\nimport { failSpinner } from \"../../utils/spinnerError\";\nimport { formatTable } from \"../../utils/formatting\";\n\nexport interface ListRunsOptions {\n experiment?: string;\n format?: string;\n limit?: string;\n}\n\nconst DEFAULT_LIMIT = 50;\nconst MAX_PAGE_SIZE = 200;\n\nconst formatTimestamp = (epochMs: number | null | undefined): string => {\n if (!epochMs || !Number.isFinite(epochMs)) return chalk.gray(\"—\");\n return new Date(epochMs).toLocaleString();\n};\n\nconst summarizePassRate = (\n evaluations: ExperimentRunSummaryEntry[\"summary\"][\"evaluations\"],\n): string => {\n const entries = Object.values(evaluations ?? {});\n if (entries.length === 0) return chalk.gray(\"—\");\n const passEntries = entries.filter(\n (e) => typeof e.averagePassed === \"number\",\n );\n if (passEntries.length === 0) {\n const scoreEntries = entries.filter(\n (e) => typeof e.averageScore === \"number\",\n );\n if (scoreEntries.length === 0) return chalk.gray(\"—\");\n const avg =\n scoreEntries.reduce((sum, e) => sum + (e.averageScore ?? 0), 0) /\n scoreEntries.length;\n return `${avg.toFixed(2)} avg`;\n }\n const avg =\n passEntries.reduce((sum, e) => sum + (e.averagePassed ?? 0), 0) /\n passEntries.length;\n return `${(avg * 100).toFixed(0)}% pass`;\n};\n\nconst runStatus = (run: ExperimentRunSummaryEntry): string => {\n if (run.timestamps.stoppedAt) return chalk.gray(\"stopped\");\n if (run.timestamps.finishedAt) return chalk.green(\"completed\");\n return chalk.yellow(\"running\");\n};\n\nexport const experimentListRunsCommand = async (\n options: ListRunsOptions = {},\n): Promise<void> => {\n checkApiKey();\n\n const experimentSlug = options.experiment?.trim();\n if (!experimentSlug) {\n console.error(\n chalk.red(\n \"Error: --experiment <slug> is required. List experiments first with `langwatch experiment list`.\",\n ),\n );\n process.exit(1);\n }\n\n const format = options.format === \"json\" ? \"json\" : \"table\";\n const limit = (() => {\n const parsed = options.limit ? parseInt(options.limit, 10) : DEFAULT_LIMIT;\n if (!Number.isFinite(parsed) || parsed <= 0) return DEFAULT_LIMIT;\n return Math.min(parsed, MAX_PAGE_SIZE);\n })();\n\n const service = new ExperimentsApiService();\n const spinner = ora(\n `Fetching runs for \"${experimentSlug}\"...`,\n ).start();\n\n try {\n const result = await service.listRuns({\n experimentSlug,\n pageSize: limit,\n });\n\n spinner.succeed(\n `Found ${result.pagination.totalHits} run${result.pagination.totalHits === 1 ? \"\" : \"s\"} for ${chalk.cyan(experimentSlug)}`,\n );\n\n if (format === \"json\") {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n if (result.runs.length === 0) {\n console.log();\n console.log(chalk.gray(\"No runs found for this experiment yet.\"));\n return;\n }\n\n console.log();\n\n const tableData = result.runs.map((run) => ({\n \"Run ID\": run.runId,\n Status: runStatus(run),\n Progress:\n typeof run.progress === \"number\" && typeof run.total === \"number\"\n ? `${run.progress}/${run.total}`\n : chalk.gray(\"—\"),\n Started: formatTimestamp(run.timestamps.createdAt),\n Finished: formatTimestamp(run.timestamps.finishedAt),\n Result: summarizePassRate(run.summary?.evaluations ?? {}),\n }));\n\n formatTable({\n data: tableData,\n headers: [\"Run ID\", \"Status\", \"Progress\", \"Started\", \"Finished\", \"Result\"],\n colorMap: {\n \"Run ID\": chalk.cyan,\n },\n });\n\n if (result.pagination.hasMore) {\n console.log();\n console.log(\n chalk.gray(\n `Showing ${result.runs.length} of ${result.pagination.totalHits}. Increase with --limit or use --format json for full data.`,\n ),\n );\n }\n\n console.log();\n console.log(\n chalk.gray(\n `Use ${chalk.cyan(\"langwatch experiment status <runId>\")} or ${chalk.cyan(\"langwatch experiment results <runId>\")} to drill into a run.`,\n ),\n );\n } catch (error) {\n failSpinner({ spinner, error, action: \"list experiment runs\" });\n process.exit(1);\n }\n};\n","import chalk from \"chalk\";\nimport ora from \"ora\";\nimport {\n ExperimentsApiService,\n type ExperimentRunResultsResponse,\n type ExperimentRunDatasetEntry,\n type ExperimentRunEvaluation,\n} from \"@/client-sdk/services/experiments/experiments-api.service\";\nimport {\n deriveRunStatus,\n isTerminalStatus,\n} from \"@/client-sdk/services/experiments/run-status\";\nimport { checkApiKey } from \"../../utils/apiKey\";\nimport { failSpinner } from \"../../utils/spinnerError\";\nimport { formatTable } from \"../../utils/formatting\";\nimport { resolveRunId } from \"./resolve-run\";\n\nexport type ExperimentResultsFilter = \"failed\" | \"all\";\nexport type ExperimentResultsFormat = \"table\" | \"json\";\n\nexport interface ExperimentResultsOptions {\n filter?: string;\n evaluator?: string;\n format?: string;\n limit?: string;\n runId?: string;\n}\n\nconst DEFAULT_LIMIT = 20;\n\nconst rowKey = (index: number, targetId?: string | null): string =>\n `${index}:${targetId ?? \"\"}`;\n\nconst summarizeEntry = (entry: Record<string, unknown>): string => {\n // Pick something meaningful: input, question, query, prompt, or first string field\n const candidates = [\"input\", \"question\", \"query\", \"prompt\", \"user\"];\n for (const key of candidates) {\n const value = entry[key];\n if (typeof value === \"string\" && value.length > 0) {\n return value.length > 60 ? `${value.slice(0, 57)}...` : value;\n }\n }\n const firstString = Object.entries(entry).find(\n ([, v]) => typeof v === \"string\" && v.length > 0,\n );\n if (firstString) {\n const v = firstString[1] as string;\n return v.length > 60 ? `${v.slice(0, 57)}...` : v;\n }\n return chalk.gray(\"—\");\n};\n\nconst isFailedEvaluation = (evaluation: ExperimentRunEvaluation): boolean => {\n if (evaluation.status === \"error\") return true;\n if (evaluation.passed === false) return true;\n return false;\n};\n\nconst isFailedRow = ({\n entry,\n evaluations,\n}: {\n entry: ExperimentRunDatasetEntry;\n evaluations: ExperimentRunEvaluation[];\n}): boolean => {\n if (entry.error) return true;\n return evaluations.some((e) => isFailedEvaluation(e));\n};\n\nexport const experimentResultsCommand = async ({\n experimentSlug,\n options = {},\n}: {\n experimentSlug: string;\n options?: ExperimentResultsOptions;\n}): Promise<void> => {\n checkApiKey();\n\n const filter: ExperimentResultsFilter =\n options.filter === \"failed\" ? \"failed\" : \"all\";\n const format: ExperimentResultsFormat =\n options.format === \"json\" ? \"json\" : \"table\";\n const limit = (() => {\n const parsed = options.limit ? parseInt(options.limit, 10) : DEFAULT_LIMIT;\n return Number.isFinite(parsed) && parsed > 0 ? parsed : DEFAULT_LIMIT;\n })();\n const evaluatorFilter = options.evaluator?.trim();\n\n const service = new ExperimentsApiService();\n const spinner = ora(`Fetching results for \"${experimentSlug}\"...`).start();\n\n try {\n const runId = await resolveRunId({\n service,\n experimentSlug,\n runId: options.runId,\n });\n const results: ExperimentRunResultsResponse = await service.getRunResults({\n runId,\n experimentSlug,\n });\n const runStatus = deriveRunStatus(results.timestamps);\n spinner.succeed(\n `Loaded results for ${chalk.cyan(runId)} (${results.dataset.length} rows, ${results.evaluations.length} evaluations)`,\n );\n\n if (!isTerminalStatus(runStatus) && format !== \"json\") {\n console.log(\n chalk.yellow(\n runStatus === \"interrupted\"\n ? `Run status: interrupted. These are partial results (the run never sent a finished/stopped marker and has had no recent updates).`\n : `Run status: running. These are partial results; more rows may appear later.`,\n ),\n );\n }\n\n // Group evaluations by target-scoped row key.\n const evaluationsByRow = new Map<string, ExperimentRunEvaluation[]>();\n for (const evaluation of results.evaluations) {\n if (evaluatorFilter && evaluation.evaluator !== evaluatorFilter) continue;\n const key = rowKey(evaluation.index, evaluation.targetId);\n const list = evaluationsByRow.get(key) ?? [];\n list.push(evaluation);\n evaluationsByRow.set(key, list);\n }\n\n // Determine evaluator columns to show\n const evaluatorNames = evaluatorFilter\n ? [evaluatorFilter]\n : Array.from(\n new Set(results.evaluations.map((e) => e.evaluator)),\n ).slice(0, 3); // cap visible columns to keep table readable\n\n let rows = results.dataset.map((entry) => ({\n entry,\n evaluations: evaluationsByRow.get(rowKey(entry.index, entry.targetId)) ?? [],\n }));\n\n if (filter === \"failed\") {\n rows = rows.filter((r) =>\n isFailedRow({ entry: r.entry, evaluations: r.evaluations }),\n );\n }\n\n const totalMatching = rows.length;\n const truncated = rows.length > limit;\n rows = rows.slice(0, limit);\n\n if (format === \"json\") {\n console.log(\n JSON.stringify(\n {\n ...results,\n dataset: rows.map((row) => row.entry),\n evaluations: rows.flatMap((row) => row.evaluations),\n meta: {\n totalMatching,\n truncated,\n limit,\n filter,\n evaluator: evaluatorFilter ?? null,\n },\n },\n null,\n 2,\n ),\n );\n return;\n }\n\n if (rows.length === 0) {\n if (filter === \"failed\") {\n console.log(chalk.gray(\"No rows matched the filter.\"));\n } else if (runStatus === \"running\") {\n console.log(\n chalk.gray(\n \"No rows recorded yet. The run is still in progress; run this again shortly.\",\n ),\n );\n } else if (runStatus === \"interrupted\") {\n console.log(\n chalk.gray(\"No rows were recorded before the run was interrupted.\"),\n );\n } else {\n console.log(chalk.gray(\"No rows recorded for this run.\"));\n }\n return;\n }\n\n const headers = [\"#\", \"Target\", ...evaluatorNames, \"Status\"];\n const tableData = rows.map(({ entry, evaluations }) => {\n const evaluatorCols: Record<string, string> = {};\n for (const name of evaluatorNames) {\n const e = evaluations.find((x) => x.evaluator === name);\n if (!e) {\n evaluatorCols[name] = chalk.gray(\"—\");\n } else if (e.status === \"error\") {\n evaluatorCols[name] = chalk.red(\"error\");\n } else if (typeof e.score === \"number\") {\n const passedSuffix =\n e.passed === false\n ? chalk.red(\" ✗\")\n : e.passed === true\n ? chalk.green(\" ✓\")\n : \"\";\n evaluatorCols[name] = `${e.score.toFixed(2)}${passedSuffix}`;\n } else if (e.label) {\n evaluatorCols[name] = e.label;\n } else if (typeof e.passed === \"boolean\") {\n evaluatorCols[name] = e.passed\n ? chalk.green(\"pass\")\n : chalk.red(\"fail\");\n } else {\n evaluatorCols[name] = chalk.gray(\"—\");\n }\n }\n const status = entry.error\n ? chalk.red(\n entry.error.length > 40\n ? `${entry.error.slice(0, 37)}...`\n : entry.error,\n )\n : evaluations.some(isFailedEvaluation)\n ? chalk.red(\"failed\")\n : chalk.green(\"ok\");\n\n return {\n \"#\": String(entry.index),\n Target: summarizeEntry(entry.entry),\n ...evaluatorCols,\n Status: status,\n };\n });\n\n formatTable({ data: tableData, headers });\n\n if (truncated) {\n console.log();\n console.log(\n chalk.gray(\n `Showing ${rows.length} of ${totalMatching} rows. Use --limit <n> or --format json for the full payload.`,\n ),\n );\n }\n } catch (error) {\n failSpinner({ spinner, error, action: \"fetch experiment results\" });\n process.exit(1);\n }\n};\n","import chalk from \"chalk\";\nimport ora from \"ora\";\nimport {\n ExperimentsApiService,\n type ExperimentSummary,\n} from \"@/client-sdk/services/experiments/experiments-api.service\";\nimport { checkApiKey } from \"../../utils/apiKey\";\nimport { failSpinner } from \"../../utils/spinnerError\";\nimport { formatTable, formatRelativeTime } from \"../../utils/formatting\";\n\nexport interface ExperimentListOptions {\n format?: string;\n limit?: string;\n}\n\nconst DEFAULT_LIMIT = 50;\nconst MAX_PAGE_SIZE = 200;\n\nexport const experimentListCommand = async (\n options: ExperimentListOptions = {},\n): Promise<void> => {\n checkApiKey();\n\n const format = options.format === \"json\" ? \"json\" : \"table\";\n const limit = (() => {\n const parsed = options.limit ? parseInt(options.limit, 10) : DEFAULT_LIMIT;\n if (!Number.isFinite(parsed) || parsed <= 0) return DEFAULT_LIMIT;\n return Math.min(parsed, MAX_PAGE_SIZE);\n })();\n\n const service = new ExperimentsApiService();\n const spinner = ora(\"Fetching experiments...\").start();\n\n try {\n const result = await service.listExperiments({ pageSize: limit });\n spinner.succeed(\n `Found ${result.pagination.totalHits} experiment${result.pagination.totalHits === 1 ? \"\" : \"s\"}`,\n );\n\n if (format === \"json\") {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n if (result.experiments.length === 0) {\n console.log();\n console.log(chalk.gray(\"No experiments found in this project.\"));\n return;\n }\n\n console.log();\n\n const tableData = result.experiments.map((exp: ExperimentSummary) => ({\n Name: exp.name ?? exp.slug,\n Slug: exp.slug,\n \"Last Run\": exp.lastRunAt\n ? formatRelativeTime(exp.lastRunAt)\n : chalk.gray(\"—\"),\n Runs: String(exp.runsCount),\n }));\n\n formatTable({\n data: tableData,\n headers: [\"Name\", \"Slug\", \"Last Run\", \"Runs\"],\n colorMap: {\n Name: chalk.cyan,\n Slug: chalk.green,\n Runs: chalk.yellow,\n },\n });\n\n if (result.pagination.hasMore) {\n console.log();\n console.log(\n chalk.gray(\n `Showing ${result.experiments.length} of ${result.pagination.totalHits}. Increase with --limit or use --format json for full data.`,\n ),\n );\n }\n\n console.log();\n console.log(\n chalk.gray(\n `Use ${chalk.cyan(\"langwatch experiment list-runs --experiment <slug>\")} to see runs for an experiment.`,\n ),\n );\n } catch (error) {\n failSpinner({ spinner, error, action: \"fetch experiments\" });\n process.exit(1);\n }\n};\n"]}