@poncho-ai/cli 0.2.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 (516) hide show
  1. package/.turbo/turbo-build.log +19 -0
  2. package/.turbo/turbo-test.log +389 -0
  3. package/CHANGELOG.md +17 -0
  4. package/LICENSE +21 -0
  5. package/dist/chunk-22OMLQUR.js +1249 -0
  6. package/dist/chunk-24JFN5RM.js +1887 -0
  7. package/dist/chunk-24TAT3US.js +2137 -0
  8. package/dist/chunk-26YBLT7G.js +997 -0
  9. package/dist/chunk-2EJIC6UW.js +1893 -0
  10. package/dist/chunk-2JNCF37R.js +1156 -0
  11. package/dist/chunk-2LVMUHJX.js +1874 -0
  12. package/dist/chunk-2OVSD65B.js +1269 -0
  13. package/dist/chunk-2RQ45LI6.js +1251 -0
  14. package/dist/chunk-2SMIRDLI.js +1854 -0
  15. package/dist/chunk-2UXPHBFI.js +1862 -0
  16. package/dist/chunk-2VFM7SSZ.js +1135 -0
  17. package/dist/chunk-2ZAUADNG.js +1456 -0
  18. package/dist/chunk-2ZNUT5WA.js +1862 -0
  19. package/dist/chunk-33ZQ7WTP.js +1834 -0
  20. package/dist/chunk-34ARQX3O.js +1156 -0
  21. package/dist/chunk-3BEWSRFW.js +1893 -0
  22. package/dist/chunk-3DVE5AG6.js +1862 -0
  23. package/dist/chunk-3KE6MHO6.js +1608 -0
  24. package/dist/chunk-3MOLPB7Z.js +997 -0
  25. package/dist/chunk-3OZZOYAZ.js +1884 -0
  26. package/dist/chunk-3VJYNZEF.js +2181 -0
  27. package/dist/chunk-3W27LOUH.js +997 -0
  28. package/dist/chunk-3WMAW74D.js +1163 -0
  29. package/dist/chunk-3Z4AHBPF.js +1569 -0
  30. package/dist/chunk-43NK6MB4.js +1977 -0
  31. package/dist/chunk-4E5M2IGA.js +1300 -0
  32. package/dist/chunk-4FVI4LVI.js +1862 -0
  33. package/dist/chunk-4GNQQJUP.js +1156 -0
  34. package/dist/chunk-4PGZFTVC.js +1234 -0
  35. package/dist/chunk-4QE2HDNC.js +1355 -0
  36. package/dist/chunk-4S2EL4ED.js +1135 -0
  37. package/dist/chunk-536SSOJ3.js +1797 -0
  38. package/dist/chunk-5CNEGIC5.js +997 -0
  39. package/dist/chunk-5CWN43YL.js +1147 -0
  40. package/dist/chunk-5HZCYTUZ.js +997 -0
  41. package/dist/chunk-5ICNG6RX.js +1885 -0
  42. package/dist/chunk-5OUIRXMN.js +997 -0
  43. package/dist/chunk-5T34JOWH.js +1460 -0
  44. package/dist/chunk-5XBAIQX3.js +1862 -0
  45. package/dist/chunk-65AIX3CS.js +1441 -0
  46. package/dist/chunk-67NBW4NG.js +1355 -0
  47. package/dist/chunk-6AFIL35M.js +1414 -0
  48. package/dist/chunk-6B3XMBKA.js +1716 -0
  49. package/dist/chunk-6CEJO4OM.js +1242 -0
  50. package/dist/chunk-6DQZUP3B.js +1460 -0
  51. package/dist/chunk-6ET624OE.js +1441 -0
  52. package/dist/chunk-6I7WFMAU.js +1862 -0
  53. package/dist/chunk-6MOKAYCL.js +1449 -0
  54. package/dist/chunk-6RFUALWB.js +1845 -0
  55. package/dist/chunk-73E57JUS.js +1231 -0
  56. package/dist/chunk-73SU7GT4.js +816 -0
  57. package/dist/chunk-74IRETUF.js +997 -0
  58. package/dist/chunk-77BYFMUN.js +1924 -0
  59. package/dist/chunk-7DAC2XE5.js +1460 -0
  60. package/dist/chunk-7GBQ4YSB.js +1024 -0
  61. package/dist/chunk-7TOJGUQ5.js +1803 -0
  62. package/dist/chunk-7W7KPLEG.js +1163 -0
  63. package/dist/chunk-7Y7ZXEN2.js +817 -0
  64. package/dist/chunk-A5WKH7H2.js +852 -0
  65. package/dist/chunk-A775UYQB.js +1886 -0
  66. package/dist/chunk-AC4OGTSK.js +1313 -0
  67. package/dist/chunk-ACCRUQ6J.js +1271 -0
  68. package/dist/chunk-AEAZZFTT.js +1886 -0
  69. package/dist/chunk-AIAC5Z55.js +1147 -0
  70. package/dist/chunk-AN34PI2R.js +1238 -0
  71. package/dist/chunk-APIA7MHJ.js +1355 -0
  72. package/dist/chunk-AQGIIT7R.js +1347 -0
  73. package/dist/chunk-ATXKV2NH.js +2111 -0
  74. package/dist/chunk-AVBKQZYR.js +1010 -0
  75. package/dist/chunk-AWIXDCZF.js +1329 -0
  76. package/dist/chunk-AXFHQBKT.js +2128 -0
  77. package/dist/chunk-AYDSTU4P.js +1156 -0
  78. package/dist/chunk-AZ35PK7E.js +1271 -0
  79. package/dist/chunk-BE6HB4IO.js +2155 -0
  80. package/dist/chunk-BIX2FI3S.js +1625 -0
  81. package/dist/chunk-BPPM5YPG.js +997 -0
  82. package/dist/chunk-BRCIVYKE.js +1420 -0
  83. package/dist/chunk-BRK2KKTF.js +1236 -0
  84. package/dist/chunk-BU7R2TVT.js +1862 -0
  85. package/dist/chunk-BXJQ4G5F.js +1901 -0
  86. package/dist/chunk-C3KTCROR.js +1128 -0
  87. package/dist/chunk-C42IGDJW.js +1032 -0
  88. package/dist/chunk-CBRPO2FE.js +1886 -0
  89. package/dist/chunk-CDNITKC6.js +1163 -0
  90. package/dist/chunk-CDVWUDFM.js +1389 -0
  91. package/dist/chunk-CH2IE453.js +1147 -0
  92. package/dist/chunk-CIHC46FS.js +1010 -0
  93. package/dist/chunk-CIYO754K.js +1687 -0
  94. package/dist/chunk-CJFNJ7U3.js +918 -0
  95. package/dist/chunk-CJN66CJY.js +1024 -0
  96. package/dist/chunk-CLJFTDJQ.js +1667 -0
  97. package/dist/chunk-CLNCOQNI.js +997 -0
  98. package/dist/chunk-CN4AUQL4.js +1460 -0
  99. package/dist/chunk-CQYGUBY6.js +1854 -0
  100. package/dist/chunk-CRJUMKVB.js +1862 -0
  101. package/dist/chunk-CZHUYI2J.js +997 -0
  102. package/dist/chunk-DIBSIWSR.js +1256 -0
  103. package/dist/chunk-DJGC3R4O.js +1836 -0
  104. package/dist/chunk-DJR2PEAQ.js +1884 -0
  105. package/dist/chunk-DKE7NWBK.js +1862 -0
  106. package/dist/chunk-DXYDN2OS.js +1147 -0
  107. package/dist/chunk-DZ3FEUJ7.js +1147 -0
  108. package/dist/chunk-EC47SFY3.js +1113 -0
  109. package/dist/chunk-ECAALEAK.js +1239 -0
  110. package/dist/chunk-ECEYIAQZ.js +997 -0
  111. package/dist/chunk-EKX7AV7O.js +1024 -0
  112. package/dist/chunk-EN6CTYUN.js +634 -0
  113. package/dist/chunk-EXCH47WX.js +1460 -0
  114. package/dist/chunk-EY2JOCTM.js +1862 -0
  115. package/dist/chunk-EYHB3LTH.js +1818 -0
  116. package/dist/chunk-F2AC5PKU.js +1446 -0
  117. package/dist/chunk-F5RCUJ62.js +1156 -0
  118. package/dist/chunk-F6OM65VA.js +1460 -0
  119. package/dist/chunk-FAEJ5CQU.js +997 -0
  120. package/dist/chunk-FB7X4KBF.js +1460 -0
  121. package/dist/chunk-FBSEEW3H.js +1862 -0
  122. package/dist/chunk-FBYY3TE5.js +1862 -0
  123. package/dist/chunk-FEA3GBGG.js +997 -0
  124. package/dist/chunk-FHPRGTOJ.js +1131 -0
  125. package/dist/chunk-FLAY6YWY.js +1389 -0
  126. package/dist/chunk-FNXIVJ3B.js +997 -0
  127. package/dist/chunk-FWRVG7RM.js +2160 -0
  128. package/dist/chunk-G47UW452.js +916 -0
  129. package/dist/chunk-G6V5O5AV.js +997 -0
  130. package/dist/chunk-GACQBIOO.js +1613 -0
  131. package/dist/chunk-GBFHLBWT.js +881 -0
  132. package/dist/chunk-GLJLTQMZ.js +997 -0
  133. package/dist/chunk-GN7DDBAT.js +1872 -0
  134. package/dist/chunk-GPTI42MM.js +1355 -0
  135. package/dist/chunk-GPXGCPVY.js +1834 -0
  136. package/dist/chunk-GRASQSCU.js +1886 -0
  137. package/dist/chunk-GU2WWG5C.js +1314 -0
  138. package/dist/chunk-GW3SAYT3.js +1679 -0
  139. package/dist/chunk-GZ4F2VI5.js +1447 -0
  140. package/dist/chunk-GZYXND4U.js +1322 -0
  141. package/dist/chunk-H27BRPVI.js +1862 -0
  142. package/dist/chunk-H4JRTOW7.js +1862 -0
  143. package/dist/chunk-HDS72SRU.js +1138 -0
  144. package/dist/chunk-HEUGSUL5.js +757 -0
  145. package/dist/chunk-HMZN5GPS.js +1024 -0
  146. package/dist/chunk-HN5SVGQO.js +1163 -0
  147. package/dist/chunk-HN6VQ5FI.js +242 -0
  148. package/dist/chunk-HNTQ66EL.js +2054 -0
  149. package/dist/chunk-HSDL3YK5.js +1134 -0
  150. package/dist/chunk-HVMIMERW.js +997 -0
  151. package/dist/chunk-HVWCQS2B.js +1834 -0
  152. package/dist/chunk-HVYMSOXQ.js +2156 -0
  153. package/dist/chunk-HYQITTK3.js +1862 -0
  154. package/dist/chunk-I4CCYPAI.js +1239 -0
  155. package/dist/chunk-IDG3X4UL.js +1229 -0
  156. package/dist/chunk-IDVRTQJ3.js +1514 -0
  157. package/dist/chunk-IEER23NN.js +1862 -0
  158. package/dist/chunk-IKLRYA4W.js +785 -0
  159. package/dist/chunk-IQBUSFBY.js +1270 -0
  160. package/dist/chunk-IUXQDZIR.js +1862 -0
  161. package/dist/chunk-IV74RJFV.js +1862 -0
  162. package/dist/chunk-IVEMIXXO.js +1854 -0
  163. package/dist/chunk-J4PNCGSP.js +1460 -0
  164. package/dist/chunk-J7ULLJUI.js +1862 -0
  165. package/dist/chunk-J7WHTBOM.js +983 -0
  166. package/dist/chunk-JBN6D7EG.js +1757 -0
  167. package/dist/chunk-JDKSD54C.js +1366 -0
  168. package/dist/chunk-JGWTOS7A.js +1507 -0
  169. package/dist/chunk-JHJ6FMSI.js +1804 -0
  170. package/dist/chunk-JJSHCP32.js +1282 -0
  171. package/dist/chunk-JLMAMC3V.js +1625 -0
  172. package/dist/chunk-JMTF7VV5.js +1919 -0
  173. package/dist/chunk-JO56GKTV.js +1133 -0
  174. package/dist/chunk-JRN3P6CS.js +1441 -0
  175. package/dist/chunk-JTKPRRSM.js +1024 -0
  176. package/dist/chunk-JVTFCTGO.js +1868 -0
  177. package/dist/chunk-JXH452LK.js +956 -0
  178. package/dist/chunk-K4SW5SP4.js +1147 -0
  179. package/dist/chunk-KANVHOQK.js +1880 -0
  180. package/dist/chunk-KBJZJWPZ.js +1143 -0
  181. package/dist/chunk-KFC4ZVRH.js +1798 -0
  182. package/dist/chunk-KHG6MSLS.js +1885 -0
  183. package/dist/chunk-KJJE6V5N.js +1886 -0
  184. package/dist/chunk-KKLEILZP.js +1868 -0
  185. package/dist/chunk-KW5QXXEN.js +1641 -0
  186. package/dist/chunk-KWMTK4N7.js +1147 -0
  187. package/dist/chunk-KYOW6LIV.js +1231 -0
  188. package/dist/chunk-KYWIUH3M.js +1355 -0
  189. package/dist/chunk-KZEA3HJL.js +1833 -0
  190. package/dist/chunk-L3KONBJE.js +1355 -0
  191. package/dist/chunk-L47B3OMM.js +1156 -0
  192. package/dist/chunk-LCQFWI6S.js +997 -0
  193. package/dist/chunk-LFIUZUI5.js +1138 -0
  194. package/dist/chunk-LHSLPQR4.js +1854 -0
  195. package/dist/chunk-LJGVAOFP.js +647 -0
  196. package/dist/chunk-LKJDYQPA.js +1687 -0
  197. package/dist/chunk-LOY6PWTR.js +1336 -0
  198. package/dist/chunk-LPFN3GNV.js +1147 -0
  199. package/dist/chunk-LPM7AN7S.js +1147 -0
  200. package/dist/chunk-LU6ES63L.js +1249 -0
  201. package/dist/chunk-M73DE7AU.js +1389 -0
  202. package/dist/chunk-M7OJ52WK.js +1448 -0
  203. package/dist/chunk-MCSM3DAE.js +1024 -0
  204. package/dist/chunk-MEP7OYUL.js +1417 -0
  205. package/dist/chunk-MFH6MVWX.js +1441 -0
  206. package/dist/chunk-MIHU3TFJ.js +1156 -0
  207. package/dist/chunk-MIU5FMSV.js +1329 -0
  208. package/dist/chunk-MJQMHH7Z.js +1976 -0
  209. package/dist/chunk-MLR2HUUY.js +1255 -0
  210. package/dist/chunk-MSBZHMUV.js +997 -0
  211. package/dist/chunk-MV4DZQRB.js +1163 -0
  212. package/dist/chunk-MWBLZDYK.js +1854 -0
  213. package/dist/chunk-N2MEPDSA.js +675 -0
  214. package/dist/chunk-N36ATUZM.js +1863 -0
  215. package/dist/chunk-NEHLM4WN.js +1610 -0
  216. package/dist/chunk-NHOJZ7FZ.js +1138 -0
  217. package/dist/chunk-NLPQBHHH.js +1282 -0
  218. package/dist/chunk-NMY3FWV7.js +1236 -0
  219. package/dist/chunk-NN2WDNCO.js +1138 -0
  220. package/dist/chunk-NNC7LH2Y.js +1258 -0
  221. package/dist/chunk-NQRWXPJ5.js +1275 -0
  222. package/dist/chunk-NR3G3D6Q.js +1238 -0
  223. package/dist/chunk-NRUAFOL3.js +2121 -0
  224. package/dist/chunk-NSCG7F6H.js +1862 -0
  225. package/dist/chunk-NXHVG7ZI.js +1113 -0
  226. package/dist/chunk-NYKPTBXA.js +1258 -0
  227. package/dist/chunk-O4AE4MFX.js +920 -0
  228. package/dist/chunk-O7GTMG3C.js +1467 -0
  229. package/dist/chunk-OBUP5UIM.js +997 -0
  230. package/dist/chunk-ONI2DTTL.js +1156 -0
  231. package/dist/chunk-OQHLTSVD.js +1776 -0
  232. package/dist/chunk-OVV6SHTA.js +997 -0
  233. package/dist/chunk-PAPAMVNI.js +1156 -0
  234. package/dist/chunk-PH7OXFMJ.js +997 -0
  235. package/dist/chunk-PHFLPSZU.js +1608 -0
  236. package/dist/chunk-PTVSK5DV.js +1854 -0
  237. package/dist/chunk-PUHWX6PD.js +1156 -0
  238. package/dist/chunk-PYDU2HN2.js +1803 -0
  239. package/dist/chunk-Q2AMIXBY.js +1250 -0
  240. package/dist/chunk-Q2EARVB7.js +1414 -0
  241. package/dist/chunk-Q4HFSYSN.js +1024 -0
  242. package/dist/chunk-Q65PNALY.js +1024 -0
  243. package/dist/chunk-QBQNHCYH.js +1791 -0
  244. package/dist/chunk-QGI55HK3.js +1433 -0
  245. package/dist/chunk-QIAODEAT.js +1862 -0
  246. package/dist/chunk-QLRJ2X3B.js +1800 -0
  247. package/dist/chunk-QTLVBIBL.js +1147 -0
  248. package/dist/chunk-QUPLQ7O4.js +1862 -0
  249. package/dist/chunk-QZGUSWLN.js +1415 -0
  250. package/dist/chunk-R7N3T7YR.js +1130 -0
  251. package/dist/chunk-RFS3GC46.js +239 -0
  252. package/dist/chunk-RJA7HIQO.js +1823 -0
  253. package/dist/chunk-RJLU3F7G.js +1156 -0
  254. package/dist/chunk-RLBXW5AY.js +1156 -0
  255. package/dist/chunk-RMKHLIMU.js +1147 -0
  256. package/dist/chunk-RS7F3BLO.js +1255 -0
  257. package/dist/chunk-RYLDHQQT.js +997 -0
  258. package/dist/chunk-RYYTEAQ7.js +1147 -0
  259. package/dist/chunk-S2KNKYQJ.js +1815 -0
  260. package/dist/chunk-S5R5IZJH.js +2056 -0
  261. package/dist/chunk-S5S7OBDZ.js +1355 -0
  262. package/dist/chunk-S6YKNJQG.js +1868 -0
  263. package/dist/chunk-SBDVWSWM.js +1251 -0
  264. package/dist/chunk-SBXSREFV.js +1237 -0
  265. package/dist/chunk-SDZJV47M.js +1238 -0
  266. package/dist/chunk-SMBILO75.js +1024 -0
  267. package/dist/chunk-SUSLSP3P.js +1456 -0
  268. package/dist/chunk-T4GPZ2AG.js +1128 -0
  269. package/dist/chunk-TA7EDJXT.js +1460 -0
  270. package/dist/chunk-TAW2ISST.js +1024 -0
  271. package/dist/chunk-TB6KKWS2.js +1138 -0
  272. package/dist/chunk-TBZCEX5O.js +1355 -0
  273. package/dist/chunk-TDOPKFNW.js +756 -0
  274. package/dist/chunk-TGY3JSDQ.js +1460 -0
  275. package/dist/chunk-THOIGUSY.js +666 -0
  276. package/dist/chunk-TLSGQKLO.js +1836 -0
  277. package/dist/chunk-TQ2QEU3G.js +1460 -0
  278. package/dist/chunk-TRJODOZM.js +1232 -0
  279. package/dist/chunk-TSBMRYLQ.js +1717 -0
  280. package/dist/chunk-TUL3R6KB.js +1024 -0
  281. package/dist/chunk-TWCD6YPP.js +2129 -0
  282. package/dist/chunk-TWQDGVLI.js +1323 -0
  283. package/dist/chunk-TZQLWQTW.js +769 -0
  284. package/dist/chunk-U22K555L.js +1803 -0
  285. package/dist/chunk-U3VXLQTW.js +1707 -0
  286. package/dist/chunk-U5QM4SRB.js +2054 -0
  287. package/dist/chunk-UCZLOOAW.js +997 -0
  288. package/dist/chunk-UDA2OZLK.js +1242 -0
  289. package/dist/chunk-UDASJ4IC.js +1355 -0
  290. package/dist/chunk-UGU2KSOQ.js +1113 -0
  291. package/dist/chunk-UJHB3CLA.js +1130 -0
  292. package/dist/chunk-UNUTAECX.js +1238 -0
  293. package/dist/chunk-UUUJVWXA.js +1806 -0
  294. package/dist/chunk-UV4WM7Q5.js +2039 -0
  295. package/dist/chunk-UXPGPOQ3.js +2113 -0
  296. package/dist/chunk-UYVWNYFB.js +1434 -0
  297. package/dist/chunk-UYWI4MPU.js +1460 -0
  298. package/dist/chunk-V2FNBN3P.js +997 -0
  299. package/dist/chunk-V6CF5XXG.js +1862 -0
  300. package/dist/chunk-V6UUV2SZ.js +1156 -0
  301. package/dist/chunk-VARTDMWQ.js +1862 -0
  302. package/dist/chunk-VC7ZYKMP.js +1156 -0
  303. package/dist/chunk-VCJNX77B.js +2038 -0
  304. package/dist/chunk-VDE2I72J.js +650 -0
  305. package/dist/chunk-VEO7FKEL.js +1156 -0
  306. package/dist/chunk-VIJYIU7E.js +2124 -0
  307. package/dist/chunk-VJX4WETG.js +1136 -0
  308. package/dist/chunk-VO3QDFU2.js +1276 -0
  309. package/dist/chunk-VOX2Q2V2.js +1933 -0
  310. package/dist/chunk-W7J5XM2X.js +1862 -0
  311. package/dist/chunk-WONM6P4N.js +1862 -0
  312. package/dist/chunk-WW576PYD.js +1862 -0
  313. package/dist/chunk-XCZCCA2D.js +997 -0
  314. package/dist/chunk-XHQOG4X6.js +1871 -0
  315. package/dist/chunk-XIYLHBWA.js +1163 -0
  316. package/dist/chunk-XKZ6XWSE.js +1907 -0
  317. package/dist/chunk-XLHKOBSF.js +1815 -0
  318. package/dist/chunk-XMMFUBB5.js +1270 -0
  319. package/dist/chunk-XQLK777K.js +1442 -0
  320. package/dist/chunk-XRN47M65.js +997 -0
  321. package/dist/chunk-XVBKUEXA.js +1441 -0
  322. package/dist/chunk-XY4ISIAV.js +1639 -0
  323. package/dist/chunk-Y2SOII6F.js +1156 -0
  324. package/dist/chunk-Y5TJU6YZ.js +1163 -0
  325. package/dist/chunk-YBPCMSUU.js +1147 -0
  326. package/dist/chunk-YDAZ3YZT.js +1004 -0
  327. package/dist/chunk-YH2QPUWO.js +1621 -0
  328. package/dist/chunk-YJX4O5CY.js +1355 -0
  329. package/dist/chunk-YNJMS3VK.js +997 -0
  330. package/dist/chunk-YNRZMOC3.js +997 -0
  331. package/dist/chunk-YNUF5JNP.js +1163 -0
  332. package/dist/chunk-YO7TJ6SG.js +2135 -0
  333. package/dist/chunk-YTUUFYVS.js +1842 -0
  334. package/dist/chunk-YXCOG54V.js +997 -0
  335. package/dist/chunk-Z7V254BA.js +1432 -0
  336. package/dist/chunk-ZBHRR3RS.js +1256 -0
  337. package/dist/chunk-ZM47X5PT.js +1236 -0
  338. package/dist/chunk-ZO6JUCLC.js +917 -0
  339. package/dist/chunk-ZOF4ERNI.js +2039 -0
  340. package/dist/chunk-ZOTRZN3T.js +1238 -0
  341. package/dist/chunk-ZPBA4JGE.js +1234 -0
  342. package/dist/chunk-ZTKGRHNV.js +1138 -0
  343. package/dist/chunk-ZW2JM2OY.js +997 -0
  344. package/dist/chunk-ZXYHUC7C.js +1722 -0
  345. package/dist/cli.d.ts +1 -0
  346. package/dist/cli.js +8 -0
  347. package/dist/index.d.ts +47 -0
  348. package/dist/index.js +37 -0
  349. package/dist/run-interactive-ink-2CDKFV6C.js +783 -0
  350. package/dist/run-interactive-ink-2JULLCIS.js +461 -0
  351. package/dist/run-interactive-ink-2KIHEGXT.js +451 -0
  352. package/dist/run-interactive-ink-2LX2NZRL.js +737 -0
  353. package/dist/run-interactive-ink-2OH6AV3C.js +756 -0
  354. package/dist/run-interactive-ink-2PLJ5XST.js +423 -0
  355. package/dist/run-interactive-ink-2ZI75VMK.js +462 -0
  356. package/dist/run-interactive-ink-3BHGPZ4B.js +423 -0
  357. package/dist/run-interactive-ink-3IUV3456.js +777 -0
  358. package/dist/run-interactive-ink-3QZK5PWY.js +168 -0
  359. package/dist/run-interactive-ink-3VLL4FNN.js +423 -0
  360. package/dist/run-interactive-ink-47Y2KAFZ.js +668 -0
  361. package/dist/run-interactive-ink-4CBTS636.js +423 -0
  362. package/dist/run-interactive-ink-4CHDJRAK.js +423 -0
  363. package/dist/run-interactive-ink-4E6GM5ST.js +423 -0
  364. package/dist/run-interactive-ink-4EKHIHGU.js +462 -0
  365. package/dist/run-interactive-ink-4NO7O233.js +744 -0
  366. package/dist/run-interactive-ink-55IZU2EZ.js +741 -0
  367. package/dist/run-interactive-ink-5A7BER6J.js +423 -0
  368. package/dist/run-interactive-ink-5NEFKF3R.js +423 -0
  369. package/dist/run-interactive-ink-5TCBH3Z4.js +462 -0
  370. package/dist/run-interactive-ink-5WOLWMGH.js +747 -0
  371. package/dist/run-interactive-ink-66JFIG2P.js +462 -0
  372. package/dist/run-interactive-ink-6R77DKEV.js +744 -0
  373. package/dist/run-interactive-ink-7B6HI7XT.js +679 -0
  374. package/dist/run-interactive-ink-7ICZH4E3.js +423 -0
  375. package/dist/run-interactive-ink-7LWBJYQE.js +423 -0
  376. package/dist/run-interactive-ink-7Y7MVKPA.js +438 -0
  377. package/dist/run-interactive-ink-A264MR35.js +423 -0
  378. package/dist/run-interactive-ink-A3NCKFFM.js +423 -0
  379. package/dist/run-interactive-ink-A4FBMTZ5.js +563 -0
  380. package/dist/run-interactive-ink-A7YPXRXR.js +462 -0
  381. package/dist/run-interactive-ink-AAER2EXR.js +451 -0
  382. package/dist/run-interactive-ink-ADVQJ2GF.js +423 -0
  383. package/dist/run-interactive-ink-ALV34HZF.js +451 -0
  384. package/dist/run-interactive-ink-ARDK3CO6.js +462 -0
  385. package/dist/run-interactive-ink-AVMVDBQK.js +462 -0
  386. package/dist/run-interactive-ink-AWV7ZOTC.js +423 -0
  387. package/dist/run-interactive-ink-AWZLJJLH.js +423 -0
  388. package/dist/run-interactive-ink-B25V52JO.js +462 -0
  389. package/dist/run-interactive-ink-BC6RGDCH.js +451 -0
  390. package/dist/run-interactive-ink-BMWLPUEU.js +451 -0
  391. package/dist/run-interactive-ink-BRT2MMN6.js +423 -0
  392. package/dist/run-interactive-ink-CB42OWV4.js +572 -0
  393. package/dist/run-interactive-ink-COZSBQND.js +777 -0
  394. package/dist/run-interactive-ink-CQFV44HM.js +451 -0
  395. package/dist/run-interactive-ink-CQMG45KQ.js +462 -0
  396. package/dist/run-interactive-ink-CQP3B7JM.js +669 -0
  397. package/dist/run-interactive-ink-CUCLNJCF.js +451 -0
  398. package/dist/run-interactive-ink-DEEZYQK5.js +423 -0
  399. package/dist/run-interactive-ink-DF5P6WZX.js +423 -0
  400. package/dist/run-interactive-ink-DFITKRY4.js +423 -0
  401. package/dist/run-interactive-ink-DG6TTEQQ.js +462 -0
  402. package/dist/run-interactive-ink-DH7ECECB.js +438 -0
  403. package/dist/run-interactive-ink-DMTUJHP6.js +423 -0
  404. package/dist/run-interactive-ink-DNSBSWLT.js +451 -0
  405. package/dist/run-interactive-ink-DV3TZEM3.js +742 -0
  406. package/dist/run-interactive-ink-E4AYCUDK.js +451 -0
  407. package/dist/run-interactive-ink-E4GPBTSL.js +462 -0
  408. package/dist/run-interactive-ink-ECVTPOIE.js +462 -0
  409. package/dist/run-interactive-ink-ELPCCGT3.js +423 -0
  410. package/dist/run-interactive-ink-ELWVRJZS.js +451 -0
  411. package/dist/run-interactive-ink-ENBMPAV7.js +462 -0
  412. package/dist/run-interactive-ink-EOVWUC3C.js +451 -0
  413. package/dist/run-interactive-ink-EVHWEXM4.js +451 -0
  414. package/dist/run-interactive-ink-F7SBCWE3.js +423 -0
  415. package/dist/run-interactive-ink-FCHXZ3JW.js +423 -0
  416. package/dist/run-interactive-ink-G27WWB5V.js +423 -0
  417. package/dist/run-interactive-ink-GDFTNYRC.js +462 -0
  418. package/dist/run-interactive-ink-GHGZAYSM.js +533 -0
  419. package/dist/run-interactive-ink-GK4IVHVT.js +684 -0
  420. package/dist/run-interactive-ink-GNCZNR6W.js +423 -0
  421. package/dist/run-interactive-ink-GQ53M5SW.js +605 -0
  422. package/dist/run-interactive-ink-GT7R7X2P.js +762 -0
  423. package/dist/run-interactive-ink-GWZTEIEZ.js +462 -0
  424. package/dist/run-interactive-ink-HA45VNUD.js +703 -0
  425. package/dist/run-interactive-ink-HB44RGFJ.js +423 -0
  426. package/dist/run-interactive-ink-HCVGKG23.js +462 -0
  427. package/dist/run-interactive-ink-HYKJ4PZ3.js +462 -0
  428. package/dist/run-interactive-ink-IGEBXARA.js +423 -0
  429. package/dist/run-interactive-ink-IGU7UVL5.js +462 -0
  430. package/dist/run-interactive-ink-JNVKOJRV.js +462 -0
  431. package/dist/run-interactive-ink-JYON5JQQ.js +461 -0
  432. package/dist/run-interactive-ink-K47CRELE.js +423 -0
  433. package/dist/run-interactive-ink-KCHMEHVH.js +547 -0
  434. package/dist/run-interactive-ink-KEB6ENSZ.js +423 -0
  435. package/dist/run-interactive-ink-KEWSKPTE.js +451 -0
  436. package/dist/run-interactive-ink-KJUHMADH.js +423 -0
  437. package/dist/run-interactive-ink-KW5NPJ32.js +423 -0
  438. package/dist/run-interactive-ink-L3EDWKF6.js +687 -0
  439. package/dist/run-interactive-ink-L4BCC6WG.js +462 -0
  440. package/dist/run-interactive-ink-LQPEZ6PR.js +520 -0
  441. package/dist/run-interactive-ink-LQXS5GMO.js +253 -0
  442. package/dist/run-interactive-ink-M4SOBC5E.js +817 -0
  443. package/dist/run-interactive-ink-MJGAQA2R.js +423 -0
  444. package/dist/run-interactive-ink-MPJB6PCJ.js +451 -0
  445. package/dist/run-interactive-ink-MXWZBG3F.js +461 -0
  446. package/dist/run-interactive-ink-N4XIVCWV.js +562 -0
  447. package/dist/run-interactive-ink-ND3PWHDU.js +462 -0
  448. package/dist/run-interactive-ink-NJTAWS3L.js +462 -0
  449. package/dist/run-interactive-ink-OBWWSIZ5.js +423 -0
  450. package/dist/run-interactive-ink-OD7YJBYI.js +423 -0
  451. package/dist/run-interactive-ink-OE23JGIN.js +451 -0
  452. package/dist/run-interactive-ink-OJ4EUMR5.js +462 -0
  453. package/dist/run-interactive-ink-OOC74RCY.js +423 -0
  454. package/dist/run-interactive-ink-P2PHTOX6.js +462 -0
  455. package/dist/run-interactive-ink-PE3XWCVU.js +423 -0
  456. package/dist/run-interactive-ink-PJBWWQF3.js +423 -0
  457. package/dist/run-interactive-ink-PLLZW6BV.js +678 -0
  458. package/dist/run-interactive-ink-PTXNQZ57.js +451 -0
  459. package/dist/run-interactive-ink-PWN5Q6T6.js +423 -0
  460. package/dist/run-interactive-ink-PZK4RD77.js +423 -0
  461. package/dist/run-interactive-ink-QBSXVTCG.js +462 -0
  462. package/dist/run-interactive-ink-QHOQB55Q.js +727 -0
  463. package/dist/run-interactive-ink-QIAC6ZMT.js +451 -0
  464. package/dist/run-interactive-ink-QLLGPIUL.js +462 -0
  465. package/dist/run-interactive-ink-R5W3ZEMY.js +818 -0
  466. package/dist/run-interactive-ink-RHDW3EHS.js +462 -0
  467. package/dist/run-interactive-ink-RLRKPNTS.js +668 -0
  468. package/dist/run-interactive-ink-RORQKBWV.js +425 -0
  469. package/dist/run-interactive-ink-RS6OZ66I.js +423 -0
  470. package/dist/run-interactive-ink-RVGRYBNQ.js +684 -0
  471. package/dist/run-interactive-ink-S35BKUZB.js +423 -0
  472. package/dist/run-interactive-ink-SS6RAQDE.js +423 -0
  473. package/dist/run-interactive-ink-SVP37E33.js +451 -0
  474. package/dist/run-interactive-ink-T53KH7FU.js +423 -0
  475. package/dist/run-interactive-ink-TCQUCJVS.js +423 -0
  476. package/dist/run-interactive-ink-TLUBKTTN.js +423 -0
  477. package/dist/run-interactive-ink-U2BAAHUU.js +438 -0
  478. package/dist/run-interactive-ink-U2KXGJ5S.js +451 -0
  479. package/dist/run-interactive-ink-U73PEMAO.js +423 -0
  480. package/dist/run-interactive-ink-UFTOTXIX.js +669 -0
  481. package/dist/run-interactive-ink-UJNQ54ZU.js +451 -0
  482. package/dist/run-interactive-ink-V63D5IV5.js +423 -0
  483. package/dist/run-interactive-ink-VLBITT4H.js +451 -0
  484. package/dist/run-interactive-ink-VSAX3XFR.js +462 -0
  485. package/dist/run-interactive-ink-WBJOY622.js +729 -0
  486. package/dist/run-interactive-ink-WERR64KP.js +451 -0
  487. package/dist/run-interactive-ink-WHTQ5OV6.js +732 -0
  488. package/dist/run-interactive-ink-WJBK4XIO.js +423 -0
  489. package/dist/run-interactive-ink-WQLCJ34D.js +462 -0
  490. package/dist/run-interactive-ink-WRKQJIAG.js +733 -0
  491. package/dist/run-interactive-ink-XG3P25DM.js +423 -0
  492. package/dist/run-interactive-ink-XPVJ22HP.js +462 -0
  493. package/dist/run-interactive-ink-XS5I2CGI.js +423 -0
  494. package/dist/run-interactive-ink-XVK7DXPB.js +785 -0
  495. package/dist/run-interactive-ink-YB3USTSB.js +706 -0
  496. package/dist/run-interactive-ink-YCBRQCG2.js +423 -0
  497. package/dist/run-interactive-ink-YOPSMTYJ.js +423 -0
  498. package/dist/run-interactive-ink-YYPCL65X.js +665 -0
  499. package/dist/run-interactive-ink-YYZT5L4Z.js +462 -0
  500. package/dist/run-interactive-ink-ZBPYRTJK.js +462 -0
  501. package/dist/run-interactive-ink-ZCCKFR2A.js +451 -0
  502. package/dist/run-interactive-ink-ZKYQ4CJW.js +423 -0
  503. package/dist/run-interactive-ink-ZMO2352Q.js +685 -0
  504. package/dist/run-interactive-ink-ZTDQ773P.js +423 -0
  505. package/dist/run-interactive-ink-ZWH74XDY.js +674 -0
  506. package/package.json +50 -0
  507. package/src/cli.ts +4 -0
  508. package/src/index.ts +1800 -0
  509. package/src/init-feature-context.ts +153 -0
  510. package/src/init-onboarding.ts +529 -0
  511. package/src/interactive-ink.tsx +5 -0
  512. package/src/run-interactive-ink.ts +618 -0
  513. package/src/web-ui.ts +1975 -0
  514. package/test/cli.test.ts +587 -0
  515. package/test/init-onboarding.contract.test.ts +48 -0
  516. package/tsconfig.json +9 -0
@@ -0,0 +1,1032 @@
1
+ // src/index.ts
2
+ import { spawn } from "child_process";
3
+ import { access, mkdir, readFile, writeFile } from "fs/promises";
4
+ import {
5
+ createServer
6
+ } from "http";
7
+ import { dirname, resolve } from "path";
8
+ import { createRequire } from "module";
9
+ import readline from "readline/promises";
10
+ import { fileURLToPath } from "url";
11
+ import {
12
+ AgentHarness,
13
+ TelemetryEmitter,
14
+ createStateStore,
15
+ loadAgentlConfig
16
+ } from "@agentl/harness";
17
+ import { Command } from "commander";
18
+ import dotenv from "dotenv";
19
+ import YAML from "yaml";
20
+ var __dirname = dirname(fileURLToPath(import.meta.url));
21
+ var require2 = createRequire(import.meta.url);
22
+ var writeJson = (response, statusCode, payload) => {
23
+ response.writeHead(statusCode, { "Content-Type": "application/json" });
24
+ response.end(JSON.stringify(payload));
25
+ };
26
+ var readRequestBody = async (request) => {
27
+ const chunks = [];
28
+ for await (const chunk of request) {
29
+ chunks.push(Buffer.from(chunk));
30
+ }
31
+ const body = Buffer.concat(chunks).toString("utf8");
32
+ return body.length > 0 ? JSON.parse(body) : {};
33
+ };
34
+ var sleep = async (ms) => await new Promise((resolveSleep) => {
35
+ setTimeout(resolveSleep, ms);
36
+ });
37
+ var clearTerminalLine = () => {
38
+ const width = Math.max(20, process.stdout.columns ?? 80);
39
+ process.stdout.write(`\r${" ".repeat(width - 1)}\r`);
40
+ };
41
+ var formatDuration = (ms) => {
42
+ if (ms < 1e3) {
43
+ return `${ms}ms`;
44
+ }
45
+ return `${(ms / 1e3).toFixed(1)}s`;
46
+ };
47
+ var typeOut = async (text) => {
48
+ const tokens = text.split(/(\s+)/).filter((token) => token.length > 0);
49
+ for (const token of tokens) {
50
+ process.stdout.write(token);
51
+ await sleep(12);
52
+ }
53
+ };
54
+ var startWaitingSpinner = () => {
55
+ const frames = ["|", "/", "-", "\\"];
56
+ let index = 0;
57
+ const timer = setInterval(() => {
58
+ process.stdout.write(`\rassistant> ${frames[index % frames.length]} thinking...`);
59
+ index += 1;
60
+ }, 100);
61
+ return () => {
62
+ clearInterval(timer);
63
+ clearTerminalLine();
64
+ };
65
+ };
66
+ var FAUX_TOOL_LOG_PATTERN = /Tool Used:|Tool Result:|\blist_skills\b|\bcreate_skill\b|\bedit_skill\b/i;
67
+ var resolveHarnessEnvironment = () => {
68
+ const value = (process.env.AGENTL_ENV ?? process.env.NODE_ENV ?? "development").toLowerCase();
69
+ if (value === "production" || value === "staging") {
70
+ return value;
71
+ }
72
+ return "development";
73
+ };
74
+ var listenOnAvailablePort = async (server, preferredPort) => await new Promise((resolveListen, rejectListen) => {
75
+ let currentPort = preferredPort;
76
+ const tryListen = () => {
77
+ const onListening = () => {
78
+ server.off("error", onError);
79
+ resolveListen(currentPort);
80
+ };
81
+ const onError = (error) => {
82
+ server.off("listening", onListening);
83
+ if (typeof error === "object" && error !== null && "code" in error && error.code === "EADDRINUSE") {
84
+ currentPort += 1;
85
+ if (currentPort > 65535) {
86
+ rejectListen(
87
+ new Error(
88
+ "No available ports found from the requested port up to 65535."
89
+ )
90
+ );
91
+ return;
92
+ }
93
+ setImmediate(tryListen);
94
+ return;
95
+ }
96
+ rejectListen(error);
97
+ };
98
+ server.once("listening", onListening);
99
+ server.once("error", onError);
100
+ server.listen(currentPort);
101
+ };
102
+ tryListen();
103
+ });
104
+ var parseParams = (values) => {
105
+ const params = {};
106
+ for (const value of values) {
107
+ const [key, ...rest] = value.split("=");
108
+ if (!key) {
109
+ continue;
110
+ }
111
+ params[key] = rest.join("=");
112
+ }
113
+ return params;
114
+ };
115
+ var AGENT_SKILL_GUIDANCE = `## Skill Authoring Guidance
116
+
117
+ When asked to create or update a skill:
118
+
119
+ 1. Inspect current skills under \`skills/\` first (\`list_directory\`, \`read_file\`).
120
+ 2. Decide skill type before writing files:
121
+ - **Instruction skill (no tool code)** for summarization, rewriting, classification, translation, planning, and other pure language tasks.
122
+ - **Tool-backed skill** only when external I/O, deterministic transforms, side effects, or integrations are required.
123
+ 3. If creating a tool-backed skill, create/update:
124
+ - \`skills/<skill-name>/SKILL.md\`
125
+ - \`skills/<skill-name>/tools/<tool-name>.ts\`
126
+ 4. Keep tool names and schemas explicit and stable.
127
+ 5. Never create placeholder tool handlers for tasks the model can already do directly.
128
+ 6. After writing files, verify by listing/reading the created paths.
129
+ 7. Ask the user to run \`agentl tools\` to confirm the new tool is discovered (when tools were added).
130
+
131
+ Skill file conventions:
132
+ - \`SKILL.md\` frontmatter should include \`name\`, \`description\`, and \`tools\`.
133
+ - Tool modules should export a default tool definition object with:
134
+ - \`name\`
135
+ - \`description\`
136
+ - \`inputSchema\`
137
+ - \`handler\``;
138
+ var AGENT_TEMPLATE = `---
139
+ name: my-agent
140
+ description: A helpful AgentL assistant
141
+ model:
142
+ provider: anthropic
143
+ name: claude-sonnet-4-20250514
144
+ temperature: 0.2
145
+ limits:
146
+ maxSteps: 50
147
+ timeout: 300
148
+ ---
149
+
150
+ # My Agent
151
+
152
+ You are a helpful assistant built with AgentL.
153
+
154
+ Working directory: {{runtime.workingDir}}
155
+ Environment: {{runtime.environment}}
156
+
157
+ ## Task Guidance
158
+
159
+ - Use tools when needed
160
+ - Explain your reasoning clearly
161
+ - Ask clarifying questions when requirements are ambiguous
162
+ - Never claim a file/tool change unless the corresponding tool call actually succeeded
163
+
164
+ ${AGENT_SKILL_GUIDANCE}
165
+ `;
166
+ var CONFIG_TEMPLATE = `export default {
167
+ mcp: [],
168
+ auth: { required: false },
169
+ state: { provider: 'memory', ttl: 3600 },
170
+ telemetry: { enabled: true }
171
+ }
172
+ `;
173
+ var PACKAGE_TEMPLATE = (name) => JSON.stringify(
174
+ {
175
+ name,
176
+ private: true,
177
+ type: "module",
178
+ dependencies: {
179
+ "@agentl/harness": "^0.1.0",
180
+ "@agentl/sdk": "^0.1.0"
181
+ }
182
+ },
183
+ null,
184
+ 2
185
+ );
186
+ var ENV_TEMPLATE = "ANTHROPIC_API_KEY=sk-ant-...\n";
187
+ var GITIGNORE_TEMPLATE = ".env\nnode_modules\ndist\n";
188
+ var TEST_TEMPLATE = `tests:
189
+ - name: "Basic sanity"
190
+ task: "What is 2 + 2?"
191
+ expect:
192
+ contains: "4"
193
+ `;
194
+ var SKILL_TEMPLATE = `---
195
+ name: starter-skill
196
+ version: 1.0.0
197
+ description: Starter local skill template
198
+ tools:
199
+ - starter-echo
200
+ ---
201
+
202
+ # Starter Skill
203
+
204
+ This is a starter local skill created by \`agentl init\`.
205
+
206
+ ## Authoring Notes
207
+
208
+ - Keep the \`tools\` frontmatter list in sync with actual tool module names.
209
+ - Prefer narrow, explicit schemas for predictable tool calling.
210
+ - After edits, run \`agentl tools\` to confirm discovery.
211
+ `;
212
+ var SKILL_TOOL_TEMPLATE = `export default {
213
+ name: "starter-echo",
214
+ description: "Echoes a message for testing local skill wiring",
215
+ inputSchema: {
216
+ type: "object",
217
+ properties: {
218
+ message: { type: "string", description: "Message to echo" }
219
+ },
220
+ required: ["message"]
221
+ },
222
+ async handler(input) {
223
+ return { echoed: input.message };
224
+ }
225
+ };
226
+ `;
227
+ var ensureFile = async (path, content) => {
228
+ await mkdir(dirname(path), { recursive: true });
229
+ await writeFile(path, content, { encoding: "utf8", flag: "wx" });
230
+ };
231
+ var writeConfigFile = async (workingDir, config) => {
232
+ const serialized = `export default ${JSON.stringify(config, null, 2)}
233
+ `;
234
+ await writeFile(resolve(workingDir, "agentl.config.js"), serialized, "utf8");
235
+ };
236
+ var extractToken = (request, authConfig) => {
237
+ if (authConfig.type === "header") {
238
+ const headerName = (authConfig.headerName ?? "x-agent-api-key").toLowerCase();
239
+ const raw = request.headers[headerName];
240
+ return Array.isArray(raw) ? raw[0] ?? "" : raw ?? "";
241
+ }
242
+ const authHeader = request.headers.authorization ?? "";
243
+ if (authHeader.toLowerCase().startsWith("bearer ")) {
244
+ return authHeader.slice(7).trim();
245
+ }
246
+ return "";
247
+ };
248
+ var authorizeRequest = async (request, config) => {
249
+ const authConfig = config?.auth;
250
+ if (!authConfig?.required) {
251
+ return true;
252
+ }
253
+ const token = extractToken(request, authConfig);
254
+ if (!token) {
255
+ return false;
256
+ }
257
+ if (authConfig.validate) {
258
+ return await authConfig.validate(token, request);
259
+ }
260
+ return token === (process.env.AGENT_API_KEY ?? "");
261
+ };
262
+ var initProject = async (projectName, options) => {
263
+ const baseDir = options?.workingDir ?? process.cwd();
264
+ const projectDir = resolve(baseDir, projectName);
265
+ await mkdir(projectDir, { recursive: true });
266
+ await ensureFile(resolve(projectDir, "AGENT.md"), AGENT_TEMPLATE);
267
+ await ensureFile(resolve(projectDir, "agentl.config.js"), CONFIG_TEMPLATE);
268
+ await ensureFile(resolve(projectDir, "package.json"), PACKAGE_TEMPLATE(projectName));
269
+ await ensureFile(resolve(projectDir, ".env.example"), ENV_TEMPLATE);
270
+ await ensureFile(resolve(projectDir, ".gitignore"), GITIGNORE_TEMPLATE);
271
+ await ensureFile(resolve(projectDir, "tests", "basic.yaml"), TEST_TEMPLATE);
272
+ await ensureFile(resolve(projectDir, "skills", "starter", "SKILL.md"), SKILL_TEMPLATE);
273
+ await ensureFile(
274
+ resolve(projectDir, "skills", "starter", "tools", "starter-echo.ts"),
275
+ SKILL_TOOL_TEMPLATE
276
+ );
277
+ process.stdout.write(`Initialized AgentL project at ${projectDir}
278
+ `);
279
+ };
280
+ var updateAgentGuidance = async (workingDir) => {
281
+ const agentPath = resolve(workingDir, "AGENT.md");
282
+ const content = await readFile(agentPath, "utf8");
283
+ const guidanceSectionPattern = /## Skill Authoring Guidance[\s\S]*?(?=\n## |\n# |$)/;
284
+ const normalized = content.replace(/\s+$/g, "");
285
+ const hasGuidance = guidanceSectionPattern.test(normalized);
286
+ const updated = hasGuidance ? normalized.replace(guidanceSectionPattern, AGENT_SKILL_GUIDANCE) : `${normalized}
287
+
288
+ ${AGENT_SKILL_GUIDANCE}
289
+ `;
290
+ if (updated === normalized) {
291
+ process.stdout.write("AGENT.md guidance is already up to date.\n");
292
+ return false;
293
+ }
294
+ await writeFile(agentPath, updated, "utf8");
295
+ process.stdout.write("Updated AGENT.md with latest skill authoring guidance.\n");
296
+ return true;
297
+ };
298
+ var formatSseEvent = (event) => `event: ${event.type}
299
+ data: ${JSON.stringify(event)}
300
+
301
+ `;
302
+ var startDevServer = async (port, options) => {
303
+ const workingDir = options?.workingDir ?? process.cwd();
304
+ dotenv.config({ path: resolve(workingDir, ".env") });
305
+ const config = await loadAgentlConfig(workingDir);
306
+ const harness = new AgentHarness({
307
+ workingDir,
308
+ environment: resolveHarnessEnvironment()
309
+ });
310
+ await harness.initialize();
311
+ const telemetry = new TelemetryEmitter(config?.telemetry);
312
+ const stateStore = createStateStore(config?.state);
313
+ const server = createServer(async (request, response) => {
314
+ if (!request.url || !request.method) {
315
+ writeJson(response, 404, { error: "Not found" });
316
+ return;
317
+ }
318
+ const [pathname] = request.url.split("?");
319
+ if (pathname === "/health" && request.method === "GET") {
320
+ writeJson(response, 200, { status: "ok" });
321
+ return;
322
+ }
323
+ if (!await authorizeRequest(request, config)) {
324
+ writeJson(response, 401, {
325
+ code: "AUTH_ERROR",
326
+ message: "Authentication failed"
327
+ });
328
+ return;
329
+ }
330
+ if (pathname === "/run/sync" && request.method === "POST") {
331
+ try {
332
+ const input = await readRequestBody(request);
333
+ const output = await harness.runToCompletion(input);
334
+ await stateStore.set({
335
+ runId: output.runId,
336
+ messages: output.messages,
337
+ updatedAt: Date.now()
338
+ });
339
+ for (const event of output.events) {
340
+ await telemetry.emit(event);
341
+ }
342
+ writeJson(response, 200, {
343
+ runId: output.runId,
344
+ status: output.result.status,
345
+ result: output.result
346
+ });
347
+ } catch (error) {
348
+ writeJson(response, 500, {
349
+ code: "RUN_ERROR",
350
+ message: error instanceof Error ? error.message : "Unknown error"
351
+ });
352
+ }
353
+ return;
354
+ }
355
+ if (pathname === "/run" && request.method === "POST") {
356
+ response.writeHead(200, {
357
+ "Content-Type": "text/event-stream",
358
+ "Cache-Control": "no-cache",
359
+ Connection: "keep-alive"
360
+ });
361
+ try {
362
+ const input = await readRequestBody(request);
363
+ let runId = "";
364
+ let finalResponse = "";
365
+ const baseMessages = [
366
+ ...input.messages ?? [],
367
+ { role: "user", content: input.task }
368
+ ];
369
+ for await (const event of harness.run(input)) {
370
+ if (event.type === "run:started") {
371
+ runId = event.runId;
372
+ }
373
+ if (event.type === "run:completed") {
374
+ finalResponse = event.result.response ?? "";
375
+ }
376
+ await telemetry.emit(event);
377
+ response.write(formatSseEvent(event));
378
+ }
379
+ if (runId) {
380
+ await stateStore.set({
381
+ runId,
382
+ messages: [...baseMessages, { role: "assistant", content: finalResponse }],
383
+ updatedAt: Date.now()
384
+ });
385
+ }
386
+ } catch (error) {
387
+ response.write(
388
+ formatSseEvent({
389
+ type: "run:error",
390
+ runId: "run_unknown",
391
+ error: {
392
+ code: "RUN_ERROR",
393
+ message: error instanceof Error ? error.message : "Unknown error"
394
+ }
395
+ })
396
+ );
397
+ } finally {
398
+ response.end();
399
+ }
400
+ return;
401
+ }
402
+ if (pathname === "/continue" && request.method === "POST") {
403
+ try {
404
+ const body = await readRequestBody(request);
405
+ if (!body.runId || !body.message) {
406
+ writeJson(response, 400, {
407
+ code: "VALIDATION_ERROR",
408
+ message: "Both runId and message are required"
409
+ });
410
+ return;
411
+ }
412
+ const state = await stateStore.get(body.runId);
413
+ if (!state) {
414
+ writeJson(response, 404, {
415
+ code: "RUN_NOT_FOUND",
416
+ message: `No conversation found for runId ${body.runId}`
417
+ });
418
+ return;
419
+ }
420
+ const output = await harness.runToCompletion({
421
+ task: body.message,
422
+ parameters: body.parameters,
423
+ messages: state.messages
424
+ });
425
+ await stateStore.set({
426
+ runId: output.runId,
427
+ messages: output.messages,
428
+ updatedAt: Date.now()
429
+ });
430
+ for (const event of output.events) {
431
+ await telemetry.emit(event);
432
+ }
433
+ writeJson(response, 200, {
434
+ runId: output.runId,
435
+ status: output.result.status,
436
+ result: output.result
437
+ });
438
+ } catch (error) {
439
+ writeJson(response, 500, {
440
+ code: "CONTINUE_ERROR",
441
+ message: error instanceof Error ? error.message : "Unknown error"
442
+ });
443
+ }
444
+ return;
445
+ }
446
+ writeJson(response, 404, { error: "Not found" });
447
+ });
448
+ const actualPort = await listenOnAvailablePort(server, port);
449
+ if (actualPort !== port) {
450
+ process.stdout.write(
451
+ `Port ${port} is in use, switched to ${actualPort}.
452
+ `
453
+ );
454
+ }
455
+ process.stdout.write(`AgentL dev server running at http://localhost:${actualPort}
456
+ `);
457
+ return server;
458
+ };
459
+ var runOnce = async (task, options) => {
460
+ const workingDir = options.workingDir ?? process.cwd();
461
+ dotenv.config({ path: resolve(workingDir, ".env") });
462
+ const config = await loadAgentlConfig(workingDir);
463
+ const harness = new AgentHarness({
464
+ workingDir,
465
+ environment: resolveHarnessEnvironment()
466
+ });
467
+ const telemetry = new TelemetryEmitter(config?.telemetry);
468
+ await harness.initialize();
469
+ const fileBlobs = await Promise.all(
470
+ options.filePaths.map(async (path) => {
471
+ const content = await readFile(resolve(workingDir, path), "utf8");
472
+ return `# File: ${path}
473
+ ${content}`;
474
+ })
475
+ );
476
+ const input = {
477
+ task: fileBlobs.length > 0 ? `${task}
478
+
479
+ ${fileBlobs.join("\n\n")}` : task,
480
+ parameters: options.params
481
+ };
482
+ if (options.json) {
483
+ const output = await harness.runToCompletion(input);
484
+ for (const event of output.events) {
485
+ await telemetry.emit(event);
486
+ }
487
+ process.stdout.write(`${JSON.stringify(output, null, 2)}
488
+ `);
489
+ return;
490
+ }
491
+ for await (const event of harness.run(input)) {
492
+ await telemetry.emit(event);
493
+ if (event.type === "model:chunk") {
494
+ process.stdout.write(event.content);
495
+ }
496
+ if (event.type === "run:error") {
497
+ process.stderr.write(`
498
+ Error: ${event.error.message}
499
+ `);
500
+ }
501
+ if (event.type === "run:completed") {
502
+ process.stdout.write("\n");
503
+ }
504
+ }
505
+ };
506
+ var runInteractive = async (workingDir, params) => {
507
+ dotenv.config({ path: resolve(workingDir, ".env") });
508
+ const harness = new AgentHarness({
509
+ workingDir,
510
+ environment: resolveHarnessEnvironment()
511
+ });
512
+ await harness.initialize();
513
+ const rl = readline.createInterface({
514
+ input: process.stdin,
515
+ output: process.stdout
516
+ });
517
+ const messages = [];
518
+ let turn = 1;
519
+ process.stdout.write("AgentL Interactive\n");
520
+ process.stdout.write("Type 'exit' to quit.\n");
521
+ process.stdout.write("------------------------------------------------------------\n");
522
+ while (true) {
523
+ const task = await rl.question("you> ");
524
+ if (task.trim().toLowerCase() === "exit") {
525
+ break;
526
+ }
527
+ const turnStart = Date.now();
528
+ let responseText = "";
529
+ let toolEvents = 0;
530
+ let runFailed = false;
531
+ let sawChunk = false;
532
+ let assistantLineOpen = false;
533
+ let stopSpinner;
534
+ process.stdout.write(`
535
+ --- turn ${turn} ---
536
+ `);
537
+ for await (const event of harness.run({
538
+ task,
539
+ parameters: params,
540
+ messages
541
+ })) {
542
+ if (event.type === "model:request" && !stopSpinner) {
543
+ stopSpinner = startWaitingSpinner();
544
+ } else if (event.type === "model:chunk") {
545
+ if (stopSpinner) {
546
+ stopSpinner();
547
+ stopSpinner = void 0;
548
+ }
549
+ if (!sawChunk) {
550
+ sawChunk = true;
551
+ assistantLineOpen = true;
552
+ process.stdout.write("assistant> ");
553
+ }
554
+ responseText += event.content;
555
+ process.stdout.write(event.content);
556
+ } else if (event.type === "tool:started") {
557
+ if (stopSpinner) {
558
+ stopSpinner();
559
+ stopSpinner = void 0;
560
+ }
561
+ if (assistantLineOpen) {
562
+ process.stdout.write("\n");
563
+ assistantLineOpen = false;
564
+ }
565
+ toolEvents += 1;
566
+ process.stdout.write(`tools> start ${event.tool}
567
+ `);
568
+ } else if (event.type === "tool:completed") {
569
+ if (stopSpinner) {
570
+ stopSpinner();
571
+ stopSpinner = void 0;
572
+ }
573
+ if (assistantLineOpen) {
574
+ process.stdout.write("\n");
575
+ assistantLineOpen = false;
576
+ }
577
+ process.stdout.write(`tools> done ${event.tool}
578
+ `);
579
+ } else if (event.type === "tool:error") {
580
+ if (stopSpinner) {
581
+ stopSpinner();
582
+ stopSpinner = void 0;
583
+ }
584
+ if (assistantLineOpen) {
585
+ process.stdout.write("\n");
586
+ assistantLineOpen = false;
587
+ }
588
+ process.stdout.write(`tools> error ${event.tool}: ${event.error}
589
+ `);
590
+ } else if (event.type === "run:error") {
591
+ if (stopSpinner) {
592
+ stopSpinner();
593
+ stopSpinner = void 0;
594
+ }
595
+ if (assistantLineOpen) {
596
+ process.stdout.write("\n");
597
+ assistantLineOpen = false;
598
+ }
599
+ runFailed = true;
600
+ process.stdout.write(`error> ${event.error.message}
601
+ `);
602
+ } else if (event.type === "run:completed" && !responseText) {
603
+ if (stopSpinner) {
604
+ stopSpinner();
605
+ stopSpinner = void 0;
606
+ }
607
+ responseText = event.result.response ?? "";
608
+ if (responseText.length > 0) {
609
+ if (!sawChunk) {
610
+ assistantLineOpen = true;
611
+ process.stdout.write("assistant> ");
612
+ await typeOut(responseText);
613
+ } else {
614
+ process.stdout.write(responseText);
615
+ }
616
+ }
617
+ }
618
+ }
619
+ if (stopSpinner) {
620
+ stopSpinner();
621
+ stopSpinner = void 0;
622
+ }
623
+ if (assistantLineOpen) {
624
+ process.stdout.write("\n");
625
+ }
626
+ if (!runFailed && toolEvents === 0 && FAUX_TOOL_LOG_PATTERN.test(responseText)) {
627
+ process.stdout.write(
628
+ "warning> assistant text described tool execution, but no real tool events occurred.\n"
629
+ );
630
+ }
631
+ process.stdout.write(
632
+ `meta> ${formatDuration(Date.now() - turnStart)} | tools: ${toolEvents}
633
+ `
634
+ );
635
+ process.stdout.write("------------------------------------------------------------\n");
636
+ messages.push({ role: "user", content: task });
637
+ messages.push({ role: "assistant", content: responseText });
638
+ turn += 1;
639
+ }
640
+ rl.close();
641
+ };
642
+ var listTools = async (workingDir) => {
643
+ dotenv.config({ path: resolve(workingDir, ".env") });
644
+ const harness = new AgentHarness({
645
+ workingDir,
646
+ environment: resolveHarnessEnvironment()
647
+ });
648
+ await harness.initialize();
649
+ const tools = harness.listTools();
650
+ if (tools.length === 0) {
651
+ process.stdout.write("No tools registered.\n");
652
+ return;
653
+ }
654
+ process.stdout.write("Available tools:\n");
655
+ for (const tool of tools) {
656
+ process.stdout.write(`- ${tool.name}: ${tool.description}
657
+ `);
658
+ }
659
+ };
660
+ var runInstallCommand = async (workingDir, packageNameOrPath) => await new Promise((resolveInstall, rejectInstall) => {
661
+ const child = spawn("pnpm", ["add", packageNameOrPath], {
662
+ cwd: workingDir,
663
+ stdio: "inherit",
664
+ env: process.env
665
+ });
666
+ child.on("exit", (code) => {
667
+ if (code === 0) {
668
+ resolveInstall();
669
+ return;
670
+ }
671
+ rejectInstall(new Error(`pnpm add failed with exit code ${code ?? -1}`));
672
+ });
673
+ });
674
+ var validateSkillPackage = async (workingDir, packageNameOrPath) => {
675
+ const packageJsonPath = packageNameOrPath.startsWith(".") || packageNameOrPath.startsWith("/") ? resolve(workingDir, packageNameOrPath, "package.json") : require2.resolve(`${packageNameOrPath}/package.json`, {
676
+ paths: [workingDir]
677
+ });
678
+ const skillRoot = resolve(packageJsonPath, "..");
679
+ const skillManifest = resolve(skillRoot, "SKILL.md");
680
+ try {
681
+ await access(skillManifest);
682
+ } catch {
683
+ throw new Error(`Skill validation failed: missing SKILL.md in ${skillRoot}`);
684
+ }
685
+ };
686
+ var addSkill = async (workingDir, packageNameOrPath) => {
687
+ await runInstallCommand(workingDir, packageNameOrPath);
688
+ await validateSkillPackage(workingDir, packageNameOrPath);
689
+ process.stdout.write(`Added skill: ${packageNameOrPath}
690
+ `);
691
+ };
692
+ var runTests = async (workingDir, filePath) => {
693
+ dotenv.config({ path: resolve(workingDir, ".env") });
694
+ const testFilePath = filePath ?? resolve(workingDir, "tests", "basic.yaml");
695
+ const content = await readFile(testFilePath, "utf8");
696
+ const parsed = YAML.parse(content);
697
+ const tests = parsed.tests ?? [];
698
+ const harness = new AgentHarness({
699
+ workingDir,
700
+ environment: resolveHarnessEnvironment()
701
+ });
702
+ await harness.initialize();
703
+ let passed = 0;
704
+ let failed = 0;
705
+ for (const testCase of tests) {
706
+ try {
707
+ const output = await harness.runToCompletion({ task: testCase.task });
708
+ const response = output.result.response ?? "";
709
+ const events = output.events;
710
+ const expectation = testCase.expect ?? {};
711
+ const checks = [];
712
+ if (expectation.contains) {
713
+ checks.push(response.includes(expectation.contains));
714
+ }
715
+ if (typeof expectation.maxSteps === "number") {
716
+ checks.push(output.result.steps <= expectation.maxSteps);
717
+ }
718
+ if (typeof expectation.maxTokens === "number") {
719
+ checks.push(
720
+ output.result.tokens.input + output.result.tokens.output <= expectation.maxTokens
721
+ );
722
+ }
723
+ if (expectation.refusal) {
724
+ checks.push(
725
+ response.toLowerCase().includes("can't") || response.toLowerCase().includes("cannot")
726
+ );
727
+ }
728
+ if (expectation.toolCalled) {
729
+ checks.push(
730
+ events.some(
731
+ (event) => event.type === "tool:started" && event.tool === expectation.toolCalled
732
+ )
733
+ );
734
+ }
735
+ const ok = checks.length === 0 ? output.result.status === "completed" : checks.every(Boolean);
736
+ if (ok) {
737
+ passed += 1;
738
+ process.stdout.write(`PASS ${testCase.name}
739
+ `);
740
+ } else {
741
+ failed += 1;
742
+ process.stdout.write(`FAIL ${testCase.name}
743
+ `);
744
+ }
745
+ } catch (error) {
746
+ failed += 1;
747
+ process.stdout.write(
748
+ `FAIL ${testCase.name} (${error instanceof Error ? error.message : "Unknown test error"})
749
+ `
750
+ );
751
+ }
752
+ }
753
+ process.stdout.write(`
754
+ Test summary: ${passed} passed, ${failed} failed
755
+ `);
756
+ return { passed, failed };
757
+ };
758
+ var buildTarget = async (workingDir, target) => {
759
+ const outDir = resolve(workingDir, ".agentl-build", target);
760
+ await mkdir(outDir, { recursive: true });
761
+ const serverEntrypoint = `import { startDevServer } from "agentl";
762
+
763
+ const port = Number.parseInt(process.env.PORT ?? "3000", 10);
764
+ await startDevServer(Number.isNaN(port) ? 3000 : port, { workingDir: process.cwd() });
765
+ `;
766
+ const runtimePackageJson = JSON.stringify(
767
+ {
768
+ name: "agentl-runtime-bundle",
769
+ private: true,
770
+ type: "module",
771
+ scripts: {
772
+ start: "node server.js"
773
+ },
774
+ dependencies: {
775
+ agentl: "^0.1.0"
776
+ }
777
+ },
778
+ null,
779
+ 2
780
+ );
781
+ if (target === "vercel") {
782
+ await mkdir(resolve(outDir, "api"), { recursive: true });
783
+ await writeFile(
784
+ resolve(outDir, "vercel.json"),
785
+ JSON.stringify(
786
+ {
787
+ version: 2,
788
+ functions: { "api/index.js": { runtime: "nodejs20.x", maxDuration: 60 } },
789
+ routes: [{ src: "/(.*)", dest: "/api/index.js" }]
790
+ },
791
+ null,
792
+ 2
793
+ ),
794
+ "utf8"
795
+ );
796
+ await writeFile(
797
+ resolve(outDir, "api", "index.js"),
798
+ `import { startDevServer } from "agentl";
799
+
800
+ let serverPromise;
801
+ export default async function handler(req, res) {
802
+ if (!serverPromise) {
803
+ serverPromise = startDevServer(0, { workingDir: process.cwd() });
804
+ }
805
+ const server = await serverPromise;
806
+ server.emit("request", req, res);
807
+ }
808
+ `,
809
+ "utf8"
810
+ );
811
+ } else if (target === "docker") {
812
+ await writeFile(
813
+ resolve(outDir, "Dockerfile"),
814
+ `FROM node:20-slim
815
+ WORKDIR /app
816
+ COPY package.json package.json
817
+ COPY AGENT.md AGENT.md
818
+ COPY agentl.config.js agentl.config.js
819
+ COPY skills skills
820
+ COPY tests tests
821
+ COPY .env.example .env.example
822
+ RUN corepack enable && npm install -g agentl
823
+ COPY server.js server.js
824
+ EXPOSE 3000
825
+ CMD ["node","server.js"]
826
+ `,
827
+ "utf8"
828
+ );
829
+ await writeFile(resolve(outDir, "server.js"), serverEntrypoint, "utf8");
830
+ await writeFile(resolve(outDir, "package.json"), runtimePackageJson, "utf8");
831
+ } else if (target === "lambda") {
832
+ await writeFile(
833
+ resolve(outDir, "lambda-handler.js"),
834
+ `import { startDevServer } from "agentl";
835
+ let serverPromise;
836
+ export const handler = async (event = {}) => {
837
+ if (!serverPromise) {
838
+ serverPromise = startDevServer(0, { workingDir: process.cwd() });
839
+ }
840
+ const body = JSON.stringify({
841
+ status: "ready",
842
+ route: event.rawPath ?? event.path ?? "/",
843
+ });
844
+ return { statusCode: 200, headers: { "content-type": "application/json" }, body };
845
+ };
846
+ `,
847
+ "utf8"
848
+ );
849
+ await writeFile(resolve(outDir, "package.json"), runtimePackageJson, "utf8");
850
+ } else if (target === "fly") {
851
+ await writeFile(
852
+ resolve(outDir, "fly.toml"),
853
+ `app = "agentl-app"
854
+ [env]
855
+ PORT = "3000"
856
+ [http_service]
857
+ internal_port = 3000
858
+ force_https = true
859
+ auto_start_machines = true
860
+ auto_stop_machines = "stop"
861
+ min_machines_running = 0
862
+ `,
863
+ "utf8"
864
+ );
865
+ await writeFile(
866
+ resolve(outDir, "Dockerfile"),
867
+ `FROM node:20-slim
868
+ WORKDIR /app
869
+ COPY package.json package.json
870
+ COPY AGENT.md AGENT.md
871
+ COPY agentl.config.js agentl.config.js
872
+ COPY skills skills
873
+ COPY tests tests
874
+ RUN npm install -g agentl
875
+ COPY server.js server.js
876
+ EXPOSE 3000
877
+ CMD ["node","server.js"]
878
+ `,
879
+ "utf8"
880
+ );
881
+ await writeFile(resolve(outDir, "server.js"), serverEntrypoint, "utf8");
882
+ await writeFile(resolve(outDir, "package.json"), runtimePackageJson, "utf8");
883
+ } else {
884
+ throw new Error(`Unsupported build target: ${target}`);
885
+ }
886
+ process.stdout.write(`Build artifacts generated at ${outDir}
887
+ `);
888
+ };
889
+ var normalizeMcpName = (entry) => entry.name ?? entry.url ?? `mcp_${Date.now()}`;
890
+ var mcpAdd = async (workingDir, options) => {
891
+ const config = await loadAgentlConfig(workingDir) ?? { mcp: [] };
892
+ const mcp = [...config.mcp ?? []];
893
+ if (!options.url) {
894
+ throw new Error("Remote MCP only: provide --url for a remote MCP server.");
895
+ }
896
+ mcp.push({
897
+ name: options.name ?? normalizeMcpName({ url: options.url }),
898
+ url: options.url,
899
+ env: options.envVars ?? []
900
+ });
901
+ await writeConfigFile(workingDir, { ...config, mcp });
902
+ process.stdout.write("MCP server added.\n");
903
+ };
904
+ var mcpList = async (workingDir) => {
905
+ const config = await loadAgentlConfig(workingDir);
906
+ const mcp = config?.mcp ?? [];
907
+ if (mcp.length === 0) {
908
+ process.stdout.write("No MCP servers configured.\n");
909
+ return;
910
+ }
911
+ process.stdout.write("Configured MCP servers:\n");
912
+ for (const entry of mcp) {
913
+ process.stdout.write(`- ${entry.name ?? entry.url} (remote: ${entry.url})
914
+ `);
915
+ }
916
+ };
917
+ var mcpRemove = async (workingDir, name) => {
918
+ const config = await loadAgentlConfig(workingDir) ?? { mcp: [] };
919
+ const before = config.mcp ?? [];
920
+ const filtered = before.filter((entry) => normalizeMcpName(entry) !== name);
921
+ await writeConfigFile(workingDir, { ...config, mcp: filtered });
922
+ process.stdout.write(`Removed MCP server: ${name}
923
+ `);
924
+ };
925
+ var buildCli = () => {
926
+ const program = new Command();
927
+ program.name("agentl").description("CLI for building and running AgentL agents").version("0.1.0");
928
+ program.command("init").argument("<name>", "project name").description("Scaffold a new AgentL project").action(async (name) => {
929
+ await initProject(name);
930
+ });
931
+ program.command("dev").description("Run local development server").option("--port <port>", "server port", "3000").action(async (options) => {
932
+ const port = Number.parseInt(options.port, 10);
933
+ await startDevServer(Number.isNaN(port) ? 3e3 : port);
934
+ });
935
+ program.command("run").argument("[task]", "task to run").description("Execute the agent once").option("--param <keyValue>", "parameter key=value", (value, all) => {
936
+ all.push(value);
937
+ return all;
938
+ }, []).option("--file <path>", "include file contents", (value, all) => {
939
+ all.push(value);
940
+ return all;
941
+ }, []).option("--json", "output json", false).option("--interactive", "run in interactive mode", false).action(
942
+ async (task, options) => {
943
+ const params = parseParams(options.param);
944
+ if (options.interactive) {
945
+ await runInteractive(process.cwd(), params);
946
+ return;
947
+ }
948
+ if (!task) {
949
+ throw new Error("Task is required unless --interactive is used.");
950
+ }
951
+ await runOnce(task, {
952
+ params,
953
+ json: options.json,
954
+ filePaths: options.file
955
+ });
956
+ }
957
+ );
958
+ program.command("tools").description("List all tools available to the agent").action(async () => {
959
+ await listTools(process.cwd());
960
+ });
961
+ program.command("add").argument("<packageOrPath>", "skill package name/path").description("Add a skill package and validate SKILL.md").action(async (packageOrPath) => {
962
+ await addSkill(process.cwd(), packageOrPath);
963
+ });
964
+ program.command("update-agent").description("Backfill latest default guidance into AGENT.md").action(async () => {
965
+ await updateAgentGuidance(process.cwd());
966
+ });
967
+ program.command("test").argument("[file]", "test file path (yaml)").description("Run yaml-defined agent tests").action(async (file) => {
968
+ const testFile = file ? resolve(process.cwd(), file) : void 0;
969
+ const result = await runTests(process.cwd(), testFile);
970
+ if (result.failed > 0) {
971
+ process.exitCode = 1;
972
+ }
973
+ });
974
+ program.command("build").argument("<target>", "vercel|docker|lambda|fly").description("Generate build artifacts for deployment target").action(async (target) => {
975
+ await buildTarget(process.cwd(), target);
976
+ });
977
+ const mcpCommand = program.command("mcp").description("Manage MCP servers");
978
+ mcpCommand.command("add").requiredOption("--url <url>", "remote MCP url").option("--name <name>", "server name").option("--env <name>", "env variable (repeatable)", (value, all) => {
979
+ all.push(value);
980
+ return all;
981
+ }, []).action(
982
+ async (options) => {
983
+ await mcpAdd(process.cwd(), {
984
+ url: options.url,
985
+ name: options.name,
986
+ envVars: options.env
987
+ });
988
+ }
989
+ );
990
+ mcpCommand.command("list").description("List configured MCP servers").action(async () => {
991
+ await mcpList(process.cwd());
992
+ });
993
+ mcpCommand.command("remove").argument("<name>", "server name").description("Remove an MCP server by name").action(async (name) => {
994
+ await mcpRemove(process.cwd(), name);
995
+ });
996
+ return program;
997
+ };
998
+ var main = async (argv = process.argv) => {
999
+ try {
1000
+ await buildCli().parseAsync(argv);
1001
+ } catch (error) {
1002
+ if (typeof error === "object" && error !== null && "code" in error && error.code === "EADDRINUSE") {
1003
+ const message = "Port is already in use. Try `agentl dev --port 3001` or stop the process using port 3000.";
1004
+ process.stderr.write(`${message}
1005
+ `);
1006
+ process.exitCode = 1;
1007
+ return;
1008
+ }
1009
+ process.stderr.write(`${error instanceof Error ? error.message : "Unknown CLI error"}
1010
+ `);
1011
+ process.exitCode = 1;
1012
+ }
1013
+ };
1014
+ var packageRoot = resolve(__dirname, "..");
1015
+
1016
+ export {
1017
+ initProject,
1018
+ updateAgentGuidance,
1019
+ startDevServer,
1020
+ runOnce,
1021
+ runInteractive,
1022
+ listTools,
1023
+ addSkill,
1024
+ runTests,
1025
+ buildTarget,
1026
+ mcpAdd,
1027
+ mcpList,
1028
+ mcpRemove,
1029
+ buildCli,
1030
+ main,
1031
+ packageRoot
1032
+ };