agentix-cli 0.25.0 → 0.27.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 (269) hide show
  1. package/README.md +2 -0
  2. package/dist/{App-6Y7B3YQH.js → App-U52IPUK2.js} +2 -2
  3. package/dist/{ChatApp-KIEUJ2DS.js → ChatApp-XP4OMHPL.js} +2 -2
  4. package/dist/agent-V2CA4TXD.js +2 -0
  5. package/dist/article-fields-L4D2BOGY.js +2 -0
  6. package/dist/article-quality-44ONVGLN.js +3 -0
  7. package/dist/article-quality-44ONVGLN.js.map +1 -0
  8. package/dist/{audit-JU3HWISB.js → audit-4245CX6P.js} +2 -2
  9. package/dist/backfill-MTD2B62I.js +6 -0
  10. package/dist/backfill-MTD2B62I.js.map +1 -0
  11. package/dist/{board-dashboard-CQ5F4GPD.js → board-dashboard-TTMAYRLG.js} +2445 -519
  12. package/dist/board-dashboard-TTMAYRLG.js.map +1 -0
  13. package/dist/{builtin-FRKAQMFS.js → builtin-B67DMJ3M.js} +2 -2
  14. package/dist/calibration-ILS5OI44.js +2 -0
  15. package/dist/chunk-2T5W3ETS.js +5 -0
  16. package/dist/{chunk-FDMWOPEL.js.map → chunk-2T5W3ETS.js.map} +1 -1
  17. package/dist/chunk-3SCPRYJB.js +5 -0
  18. package/dist/chunk-3SCPRYJB.js.map +1 -0
  19. package/dist/chunk-4BR7D2OU.js +36 -0
  20. package/dist/chunk-4BR7D2OU.js.map +1 -0
  21. package/dist/{chunk-P4VWIVKN.js → chunk-52ZPELD2.js} +403 -29
  22. package/dist/chunk-52ZPELD2.js.map +1 -0
  23. package/dist/{chunk-5U35WAZF.js → chunk-77OV7346.js} +6 -6
  24. package/dist/chunk-77OV7346.js.map +1 -0
  25. package/dist/chunk-AJ5RMU7X.js +2 -0
  26. package/dist/chunk-AJ5RMU7X.js.map +1 -0
  27. package/dist/chunk-AJONZWLT.js +2 -0
  28. package/dist/chunk-AJONZWLT.js.map +1 -0
  29. package/dist/chunk-AX2PWSRT.js +114 -0
  30. package/dist/chunk-AX2PWSRT.js.map +1 -0
  31. package/dist/chunk-BH3GTCZ6.js +2 -0
  32. package/dist/chunk-BH3GTCZ6.js.map +1 -0
  33. package/dist/chunk-BPIRO4YD.js +126 -0
  34. package/dist/chunk-BPIRO4YD.js.map +1 -0
  35. package/dist/chunk-CJQQIRPD.js +13 -0
  36. package/dist/chunk-CJQQIRPD.js.map +1 -0
  37. package/dist/chunk-DCDQZR7I.js +24 -0
  38. package/dist/chunk-DCDQZR7I.js.map +1 -0
  39. package/dist/chunk-EVWEG3VD.js +3 -0
  40. package/dist/chunk-EVWEG3VD.js.map +1 -0
  41. package/dist/chunk-F4HZTZHW.js +2 -0
  42. package/dist/chunk-F4HZTZHW.js.map +1 -0
  43. package/dist/chunk-F6CNF7V3.js +25 -0
  44. package/dist/chunk-F6CNF7V3.js.map +1 -0
  45. package/dist/chunk-FIEJDZVC.js +121 -0
  46. package/dist/chunk-FIEJDZVC.js.map +1 -0
  47. package/dist/chunk-FIOB3MEX.js +2 -0
  48. package/dist/{chunk-H5D7ATXS.js → chunk-FKBGJYWQ.js} +5 -5
  49. package/dist/chunk-FKBGJYWQ.js.map +1 -0
  50. package/dist/chunk-GDWJUGB5.js +9 -0
  51. package/dist/chunk-GDWJUGB5.js.map +1 -0
  52. package/dist/{chunk-TRJTTBE2.js → chunk-IB3F7VBE.js} +7 -7
  53. package/dist/{chunk-TRJTTBE2.js.map → chunk-IB3F7VBE.js.map} +1 -1
  54. package/dist/chunk-IBUSGCLQ.js +109 -0
  55. package/dist/chunk-IBUSGCLQ.js.map +1 -0
  56. package/dist/{chunk-LDHPMJ7M.js → chunk-IWMW5432.js} +3 -3
  57. package/dist/chunk-IWMW5432.js.map +1 -0
  58. package/dist/chunk-K33GIBSE.js +2 -0
  59. package/dist/chunk-K33GIBSE.js.map +1 -0
  60. package/dist/chunk-L2IZPR6P.js +45 -0
  61. package/dist/chunk-L2IZPR6P.js.map +1 -0
  62. package/dist/chunk-L2WSPY6S.js +2 -0
  63. package/dist/chunk-L2WSPY6S.js.map +1 -0
  64. package/dist/chunk-LCIREYTD.js +54 -0
  65. package/dist/chunk-LCIREYTD.js.map +1 -0
  66. package/dist/chunk-LNRB5MCU.js +530 -0
  67. package/dist/chunk-LNRB5MCU.js.map +1 -0
  68. package/dist/chunk-OPHIXXGI.js +157 -0
  69. package/dist/chunk-OPHIXXGI.js.map +1 -0
  70. package/dist/{chunk-JTJIPNXY.js → chunk-PNWNVOEZ.js} +1 -1
  71. package/dist/chunk-PNWNVOEZ.js.map +1 -0
  72. package/dist/{chunk-LNXCJWOU.js → chunk-UFAGYX73.js} +45 -47
  73. package/dist/chunk-UFAGYX73.js.map +1 -0
  74. package/dist/{chunk-DJEZ2HVU.js → chunk-VDMYBPYB.js} +1 -1
  75. package/dist/chunk-VDMYBPYB.js.map +1 -0
  76. package/dist/chunk-VTE7L6LO.js +5 -0
  77. package/dist/{chunk-G57RZCXM.js.map → chunk-VTE7L6LO.js.map} +1 -1
  78. package/dist/chunk-W5C2GDNC.js +32 -0
  79. package/dist/{chunk-JP5IEXR7.js.map → chunk-W5C2GDNC.js.map} +1 -1
  80. package/dist/chunk-WPMX3VGI.js +3 -0
  81. package/dist/chunk-WPMX3VGI.js.map +1 -0
  82. package/dist/chunk-WZ72HX5C.js +1182 -0
  83. package/dist/chunk-WZ72HX5C.js.map +1 -0
  84. package/dist/chunk-ZTEU5JVQ.js +2 -0
  85. package/dist/chunk-ZTEU5JVQ.js.map +1 -0
  86. package/dist/{chunk-2WVX3LEC.js → chunk-ZVP6GB4G.js} +1 -1
  87. package/dist/chunk-ZVP6GB4G.js.map +1 -0
  88. package/dist/cli.js +1 -1
  89. package/dist/cli.js.map +1 -1
  90. package/dist/client-PX25MD47.js +2 -0
  91. package/dist/{compaction-NWEMOSHA.js → compaction-FD4R23HZ.js} +4 -4
  92. package/dist/config-HL5F36V4.js +2 -0
  93. package/dist/config-mutator-HBX53OMJ.js +2 -0
  94. package/dist/{conflict-detector-D7VIYPDI.js → conflict-detector-ZPOT3M2C.js} +2 -2
  95. package/dist/conflict-detector-ZPOT3M2C.js.map +1 -0
  96. package/dist/context-planner-AQHJMVY2.js +17 -0
  97. package/dist/context-planner-AQHJMVY2.js.map +1 -0
  98. package/dist/debug-3MEUO2P2.js +2 -0
  99. package/dist/{discover-XJXQXXIO.js → discover-D4VVRNAI.js} +2 -2
  100. package/dist/discover-D4VVRNAI.js.map +1 -0
  101. package/dist/doctor-PBAH6XL3.js +2 -0
  102. package/dist/editor-chat-OB7IQOB5.js +137 -0
  103. package/dist/editor-chat-OB7IQOB5.js.map +1 -0
  104. package/dist/entry-triage-LK34TSQD.js +2 -0
  105. package/dist/entry-triage-LK34TSQD.js.map +1 -0
  106. package/dist/facts-YVEJOM7O.js +22 -0
  107. package/dist/facts-YVEJOM7O.js.map +1 -0
  108. package/dist/heal-FVLBHYP7.js +2 -0
  109. package/dist/index.d.ts +1073 -65
  110. package/dist/index.js +13 -13
  111. package/dist/index.js.map +1 -1
  112. package/dist/{ingest-whatsapp-LZE62INA.js → ingest-whatsapp-NS4OWDOU.js} +2 -2
  113. package/dist/loader-4ZGTK7LD.js +2 -0
  114. package/dist/loader-BOKE5M5S.js +2 -0
  115. package/dist/memory-extract-F5ZHWY5E.js +2 -0
  116. package/dist/{migrate-v2-QO7SLKIM.js → migrate-v2-V4WN2VVM.js} +2 -2
  117. package/dist/ntfy-X7EPB3TG.js +4 -0
  118. package/dist/ntfy-X7EPB3TG.js.map +1 -0
  119. package/dist/processes-WU23U2OJ.js +2 -0
  120. package/dist/program-YGXVCV2Y.js +2 -0
  121. package/dist/{projects-api-KRME2YKZ.js → projects-api-QE6L65SK.js} +2 -2
  122. package/dist/{projects-mutate-3NHVG437.js → projects-mutate-MY7JTLSZ.js} +2 -2
  123. package/dist/providers-KO2DODIO.js +2 -0
  124. package/dist/query-ZKTFJMNE.js +2 -0
  125. package/dist/questions-4B4KSPXG.js +3 -0
  126. package/dist/questions-4B4KSPXG.js.map +1 -0
  127. package/dist/recipes-7S4MC5OJ.js +2 -0
  128. package/dist/registry-PSZDPFZK.js +2 -0
  129. package/dist/review-candidates-AEUXRQQC.js +4 -0
  130. package/dist/review-candidates-AEUXRQQC.js.map +1 -0
  131. package/dist/review-store-B4YE3EFK.js +4 -0
  132. package/dist/review-store-B4YE3EFK.js.map +1 -0
  133. package/dist/{rotation-memo-B3EXXSEH.js → rotation-memo-7T75BLEX.js} +2 -2
  134. package/dist/routing-4PV66BK6.js +2 -0
  135. package/dist/routing-4PV66BK6.js.map +1 -0
  136. package/dist/runner-YRBVNYTY.js +2 -0
  137. package/dist/scheduler-GZZAN6ZG.js +2 -0
  138. package/dist/seat-VZ7AVO27.js +2 -0
  139. package/dist/select-F5I5PO2O.js +2 -0
  140. package/dist/select-F5I5PO2O.js.map +1 -0
  141. package/dist/store-MCOA6N4F.js +2 -0
  142. package/dist/{subagent-WV7QKQ3L.js → subagent-2SJHSSJS.js} +2 -2
  143. package/dist/{surface-usage-PRL6Z4U3.js → surface-usage-NS74AXSE.js} +2 -2
  144. package/dist/timers-PCB4ZIBD.js +2 -0
  145. package/dist/triage-backtest-JNO7RKX7.js +2 -0
  146. package/dist/triage-backtest-JNO7RKX7.js.map +1 -0
  147. package/dist/types-H5ENIUIT.js +2 -0
  148. package/dist/types-OIFU3KSQ.js +2 -0
  149. package/dist/web/workflow-editor.global.js +1542 -0
  150. package/dist/web/workflow-editor.global.js.map +1 -0
  151. package/dist/{whatsapp-state-XMTCSRXU.js → whatsapp-state-6D6FHHD2.js} +2 -2
  152. package/dist/wiki-N5SMP3DT.js +2 -0
  153. package/dist/wiki-N5SMP3DT.js.map +1 -0
  154. package/dist/workflows/templates/branching.yaml +1 -1
  155. package/dist/{workspace-setup-TBQAHYHJ.js → workspace-setup-B3F3TUDE.js} +2 -2
  156. package/dist/workspace-setup-B3F3TUDE.js.map +1 -0
  157. package/package.json +1 -1
  158. package/dist/agent-QGZIAZMY.js +0 -2
  159. package/dist/architect-SEPWMWS4.js +0 -2
  160. package/dist/board-dashboard-CQ5F4GPD.js.map +0 -1
  161. package/dist/chunk-2WVX3LEC.js.map +0 -1
  162. package/dist/chunk-3WQFCIB6.js +0 -24
  163. package/dist/chunk-3WQFCIB6.js.map +0 -1
  164. package/dist/chunk-4YCH6IZV.js +0 -2
  165. package/dist/chunk-53GCFZPR.js +0 -116
  166. package/dist/chunk-53GCFZPR.js.map +0 -1
  167. package/dist/chunk-53NRX2NA.js +0 -2
  168. package/dist/chunk-53NRX2NA.js.map +0 -1
  169. package/dist/chunk-5U35WAZF.js.map +0 -1
  170. package/dist/chunk-BFXONUUN.js +0 -108
  171. package/dist/chunk-BFXONUUN.js.map +0 -1
  172. package/dist/chunk-BFZUG66X.js +0 -45
  173. package/dist/chunk-BFZUG66X.js.map +0 -1
  174. package/dist/chunk-DJEZ2HVU.js.map +0 -1
  175. package/dist/chunk-FDMWOPEL.js +0 -5
  176. package/dist/chunk-FDWOECJY.js +0 -54
  177. package/dist/chunk-FDWOECJY.js.map +0 -1
  178. package/dist/chunk-G57RZCXM.js +0 -5
  179. package/dist/chunk-H5D7ATXS.js.map +0 -1
  180. package/dist/chunk-HA3XI7Z2.js +0 -155
  181. package/dist/chunk-HA3XI7Z2.js.map +0 -1
  182. package/dist/chunk-HR4JSRZS.js +0 -3
  183. package/dist/chunk-HR4JSRZS.js.map +0 -1
  184. package/dist/chunk-ISEBLHWX.js +0 -118
  185. package/dist/chunk-ISEBLHWX.js.map +0 -1
  186. package/dist/chunk-JP5IEXR7.js +0 -32
  187. package/dist/chunk-JTJIPNXY.js.map +0 -1
  188. package/dist/chunk-JXWAGMI2.js +0 -13
  189. package/dist/chunk-JXWAGMI2.js.map +0 -1
  190. package/dist/chunk-KUCCW2VG.js +0 -431
  191. package/dist/chunk-KUCCW2VG.js.map +0 -1
  192. package/dist/chunk-LDHPMJ7M.js.map +0 -1
  193. package/dist/chunk-LNXCJWOU.js.map +0 -1
  194. package/dist/chunk-NGSIRE4X.js +0 -126
  195. package/dist/chunk-NGSIRE4X.js.map +0 -1
  196. package/dist/chunk-P4VWIVKN.js.map +0 -1
  197. package/dist/chunk-Q6YO7LYE.js +0 -47
  198. package/dist/chunk-Q6YO7LYE.js.map +0 -1
  199. package/dist/chunk-SR3X25TN.js +0 -3
  200. package/dist/chunk-SR3X25TN.js.map +0 -1
  201. package/dist/chunk-TMKLHTCG.js +0 -971
  202. package/dist/chunk-TMKLHTCG.js.map +0 -1
  203. package/dist/chunk-VJUTQAPJ.js +0 -2
  204. package/dist/chunk-VJUTQAPJ.js.map +0 -1
  205. package/dist/client-GGVVLOOF.js +0 -2
  206. package/dist/config-7FSZFRTQ.js +0 -2
  207. package/dist/config-mutator-POCOYYJ4.js +0 -2
  208. package/dist/conflict-detector-D7VIYPDI.js.map +0 -1
  209. package/dist/context-planner-45GEWKGL.js +0 -17
  210. package/dist/context-planner-45GEWKGL.js.map +0 -1
  211. package/dist/debug-N3B5NVJU.js +0 -2
  212. package/dist/discover-XJXQXXIO.js.map +0 -1
  213. package/dist/doctor-DHLBEKA4.js +0 -2
  214. package/dist/heal-HZ3EQD52.js +0 -2
  215. package/dist/loader-5CA3O5GM.js +0 -2
  216. package/dist/loader-6IHUCPVO.js +0 -2
  217. package/dist/memory-extract-AENFVVO5.js +0 -2
  218. package/dist/processes-UIC4XXA6.js +0 -2
  219. package/dist/program-WVAVJFND.js +0 -2
  220. package/dist/providers-L27BJ5A6.js +0 -2
  221. package/dist/query-HZYYRCLU.js +0 -2
  222. package/dist/recipes-EPLE2SNT.js +0 -2
  223. package/dist/registry-T36ZIAWV.js +0 -2
  224. package/dist/runner-BFYDWPUO.js +0 -2
  225. package/dist/scheduler-GH7TIKYS.js +0 -2
  226. package/dist/store-I3HEWVLQ.js +0 -2
  227. package/dist/timers-5LPZN55J.js +0 -2
  228. package/dist/types-VECTMYTO.js +0 -2
  229. package/dist/types-Y6ZCZ52Z.js +0 -2
  230. package/dist/wiki-M6YNRFC4.js +0 -2
  231. /package/dist/{App-6Y7B3YQH.js.map → App-U52IPUK2.js.map} +0 -0
  232. /package/dist/{ChatApp-KIEUJ2DS.js.map → ChatApp-XP4OMHPL.js.map} +0 -0
  233. /package/dist/{agent-QGZIAZMY.js.map → agent-V2CA4TXD.js.map} +0 -0
  234. /package/dist/{architect-SEPWMWS4.js.map → article-fields-L4D2BOGY.js.map} +0 -0
  235. /package/dist/{audit-JU3HWISB.js.map → audit-4245CX6P.js.map} +0 -0
  236. /package/dist/{builtin-FRKAQMFS.js.map → builtin-B67DMJ3M.js.map} +0 -0
  237. /package/dist/{chunk-4YCH6IZV.js.map → calibration-ILS5OI44.js.map} +0 -0
  238. /package/dist/{client-GGVVLOOF.js.map → chunk-FIOB3MEX.js.map} +0 -0
  239. /package/dist/{config-7FSZFRTQ.js.map → client-PX25MD47.js.map} +0 -0
  240. /package/dist/{compaction-NWEMOSHA.js.map → compaction-FD4R23HZ.js.map} +0 -0
  241. /package/dist/{config-mutator-POCOYYJ4.js.map → config-HL5F36V4.js.map} +0 -0
  242. /package/dist/{debug-N3B5NVJU.js.map → config-mutator-HBX53OMJ.js.map} +0 -0
  243. /package/dist/{doctor-DHLBEKA4.js.map → debug-3MEUO2P2.js.map} +0 -0
  244. /package/dist/{heal-HZ3EQD52.js.map → doctor-PBAH6XL3.js.map} +0 -0
  245. /package/dist/{loader-5CA3O5GM.js.map → heal-FVLBHYP7.js.map} +0 -0
  246. /package/dist/{ingest-whatsapp-LZE62INA.js.map → ingest-whatsapp-NS4OWDOU.js.map} +0 -0
  247. /package/dist/{loader-6IHUCPVO.js.map → loader-4ZGTK7LD.js.map} +0 -0
  248. /package/dist/{memory-extract-AENFVVO5.js.map → loader-BOKE5M5S.js.map} +0 -0
  249. /package/dist/{processes-UIC4XXA6.js.map → memory-extract-F5ZHWY5E.js.map} +0 -0
  250. /package/dist/{migrate-v2-QO7SLKIM.js.map → migrate-v2-V4WN2VVM.js.map} +0 -0
  251. /package/dist/{program-WVAVJFND.js.map → processes-WU23U2OJ.js.map} +0 -0
  252. /package/dist/{providers-L27BJ5A6.js.map → program-YGXVCV2Y.js.map} +0 -0
  253. /package/dist/{projects-api-KRME2YKZ.js.map → projects-api-QE6L65SK.js.map} +0 -0
  254. /package/dist/{projects-mutate-3NHVG437.js.map → projects-mutate-MY7JTLSZ.js.map} +0 -0
  255. /package/dist/{query-HZYYRCLU.js.map → providers-KO2DODIO.js.map} +0 -0
  256. /package/dist/{recipes-EPLE2SNT.js.map → query-ZKTFJMNE.js.map} +0 -0
  257. /package/dist/{registry-T36ZIAWV.js.map → recipes-7S4MC5OJ.js.map} +0 -0
  258. /package/dist/{runner-BFYDWPUO.js.map → registry-PSZDPFZK.js.map} +0 -0
  259. /package/dist/{rotation-memo-B3EXXSEH.js.map → rotation-memo-7T75BLEX.js.map} +0 -0
  260. /package/dist/{scheduler-GH7TIKYS.js.map → runner-YRBVNYTY.js.map} +0 -0
  261. /package/dist/{store-I3HEWVLQ.js.map → scheduler-GZZAN6ZG.js.map} +0 -0
  262. /package/dist/{surface-usage-PRL6Z4U3.js.map → seat-VZ7AVO27.js.map} +0 -0
  263. /package/dist/{timers-5LPZN55J.js.map → store-MCOA6N4F.js.map} +0 -0
  264. /package/dist/{subagent-WV7QKQ3L.js.map → subagent-2SJHSSJS.js.map} +0 -0
  265. /package/dist/{types-VECTMYTO.js.map → surface-usage-NS74AXSE.js.map} +0 -0
  266. /package/dist/{types-Y6ZCZ52Z.js.map → timers-PCB4ZIBD.js.map} +0 -0
  267. /package/dist/{wiki-M6YNRFC4.js.map → types-H5ENIUIT.js.map} +0 -0
  268. /package/dist/{workspace-setup-TBQAHYHJ.js.map → types-OIFU3KSQ.js.map} +0 -0
  269. /package/dist/{whatsapp-state-XMTCSRXU.js.map → whatsapp-state-6D6FHHD2.js.map} +0 -0
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
- import{a as U}from"./chunk-JP5IEXR7.js";import{a as xt,b as re,c as ae,d as Ct,e as Pt,f as bt,u as $t,v as Tt,w as Rt}from"./chunk-TMKLHTCG.js";import"./chunk-3WQFCIB6.js";import{C as St,d as lt,e as ct,f as dt,g as pt,h as gt}from"./chunk-HA3XI7Z2.js";import"./chunk-Q6YO7LYE.js";import"./chunk-M4AMWP3H.js";import{A as H,B as E,C as I,a as be,b as $e,c as Te,d as je,e as _e,f as Ue,g as Be,h as We,i as qe,j as Ve,k as Ye,l as F,m as Q,n as Ze,o as et,p as tt,q as j,r as st,s as ot,t as nt,u as P,v as Z,w as it,x as rt,y as at,z as vt}from"./chunk-NGSIRE4X.js";import{a as X,b as M,c as _}from"./chunk-SFQUP3BP.js";import"./chunk-I3SIXTJO.js";import"./chunk-67Q4DCPS.js";import"./chunk-LDHPMJ7M.js";import"./chunk-2WVX3LEC.js";import"./chunk-76Z4VHDX.js";import"./chunk-W4YR2RO2.js";import"./chunk-AFRHKA7B.js";import{i as wt}from"./chunk-53GCFZPR.js";import"./chunk-FDMWOPEL.js";import{d as ht,f as yt,g as kt}from"./chunk-JXWAGMI2.js";import"./chunk-ISEBLHWX.js";import"./chunk-HR4JSRZS.js";import"./chunk-VWTBHLMX.js";import{a as mt,b as ut,e as ft}from"./chunk-BFXONUUN.js";import"./chunk-JTJIPNXY.js";import"./chunk-64P4QHSZ.js";import"./chunk-BFZUG66X.js";import"./chunk-SR3X25TN.js";import"./chunk-53NRX2NA.js";import{a as Re,b as Ae,c as Me,d as Ee,e as Ie,f as Oe,g as Ge,h as De,i as Le,j as Ne,k as Fe,m as A}from"./chunk-FDWOECJY.js";import{a as m}from"./chunk-VJUTQAPJ.js";import{a as He,b as Je,c as N,d as Ke}from"./chunk-DJEZ2HVU.js";import{a as ze,b as Xe,e as Qe}from"./chunk-DSYKYZMT.js";import"./chunk-5U35WAZF.js";import"./chunk-QOYAX2FT.js";import"./chunk-4YCH6IZV.js";import{execa as At}from"execa";import{existsSync as le,promises as ee}from"fs";import x from"path";import pe from"node-fetch";async function Mt(n,e){let t=n.split("/");if(t.length<2)throw new Error(`Invalid skill package ID: ${n}. Expected format: owner/repo`);let s=t[0],i=t[1],o=t[2];try{let a=o?`${s}/${i}/${o}`:`${s}/${i}`;await At("npx",["-y","skills","add",a],{cwd:e,stdio:"pipe"}),m.success(`Installed skill package: ${n}`);let r=x.resolve(e,".skills",`${s}_${i}`);if(le(r))return await de(r,n);let l=x.resolve(e,".skills");return le(l)?await de(l,n):[]}catch{return m.info(`Fetching skills directly from GitHub: ${s}/${i}`),await Et(s,i,o,e)}}async function Et(n,e,t,s){let i=[];try{let o=`https://api.github.com/repos/${n}/${e}/git/trees/main?recursive=1`,a=await pe(o);if(!a.ok)throw new Error(`GitHub API error: ${a.status}`);let l=(await a.json()).tree.filter(c=>c.type==="blob"&&c.path.endsWith("SKILL.md"));if(t){let c=l.find(g=>g.path.includes(`/${t}/`)||g.path===`${t}/SKILL.md`);if(c){let g=await ce(n,e,c.path,s);g&&i.push(g)}}else for(let c of l){let g=await ce(n,e,c.path,s);g&&i.push(g)}}catch(o){m.error(`Failed to fetch skills from GitHub: ${o.message}`)}return i}async function ce(n,e,t,s){try{let i=`https://raw.githubusercontent.com/${n}/${e}/main/${t}`,o=await pe(i);if(!o.ok)return null;let a=await o.text(),r=N(a);if(r){r.source="remote",r.packageId=`${n}/${e}`;let l=x.dirname(t),c=x.resolve(s,".skills",`${n}_${e}`,l);await ee.mkdir(c,{recursive:!0}),await ee.writeFile(x.resolve(c,"SKILL.md"),a),r.path=x.resolve(c,"SKILL.md")}return r}catch{return null}}async function de(n,e){let t=[],{default:s}=await import("fast-glob"),i=await s.glob("**/SKILL.md",{cwd:n,deep:5});for(let o of i)try{let a=x.resolve(n,o),r=await ee.readFile(a,"utf8"),l=N(r);l&&(l.source="remote",l.path=a,l.packageId=e,t.push(l))}catch{}return t}async function It(n,e,t,s,i){let o=["---",`name: ${n}`,`description: ${e}`];if(s?.length){o.push("tags:");for(let a of s)o.push(` - ${a}`)}if(i?.length){o.push("globs:");for(let a of i)o.push(` - ${a}`)}return o.push("---"),`${o.join(`
1
+ import{a as H}from"./chunk-W5C2GDNC.js";import{A as It,B as Ot,C as Gt,a as Rt,b as le,c as ce,d as At,e as Mt,f as Et}from"./chunk-WZ72HX5C.js";import"./chunk-F6CNF7V3.js";import"./chunk-DCDQZR7I.js";import"./chunk-IWMW5432.js";import"./chunk-ZVP6GB4G.js";import{F as bt,d as yt,e as kt,f as wt,g as St,h as vt}from"./chunk-OPHIXXGI.js";import"./chunk-GDWJUGB5.js";import"./chunk-M4AMWP3H.js";import"./chunk-4BR7D2OU.js";import{A as J,B as E,C as I,a as be,b as Te,c as Re,d as Ue,e as He,f as Je,g as qe,h as Ye,i as Ve,j as ze,k as Xe,l as j,m as ee,n as tt,o as st,p as ot,q as _,r as nt,s as it,t as rt,u as P,v as te,w as at,x as lt,y as ct,z as Tt}from"./chunk-BPIRO4YD.js";import{a as Z,b as M,c as U}from"./chunk-SFQUP3BP.js";import"./chunk-3SCPRYJB.js";import"./chunk-I3SIXTJO.js";import"./chunk-67Q4DCPS.js";import"./chunk-76Z4VHDX.js";import"./chunk-W4YR2RO2.js";import"./chunk-AFRHKA7B.js";import{h as $t}from"./chunk-FIEJDZVC.js";import"./chunk-2T5W3ETS.js";import"./chunk-77OV7346.js";import"./chunk-VWTBHLMX.js";import{a as xt,b as Ct,e as Pt}from"./chunk-IBUSGCLQ.js";import"./chunk-PNWNVOEZ.js";import"./chunk-64P4QHSZ.js";import"./chunk-L2IZPR6P.js";import"./chunk-AJ5RMU7X.js";import"./chunk-EVWEG3VD.js";import{j as ft,k as ut,l as ht}from"./chunk-AX2PWSRT.js";import"./chunk-AJONZWLT.js";import"./chunk-F4HZTZHW.js";import"./chunk-ZTEU5JVQ.js";import"./chunk-QOYAX2FT.js";import"./chunk-WPMX3VGI.js";import"./chunk-K33GIBSE.js";import{a as Ae,b as Me,c as Ee,d as Ie,e as Oe,f as Ge,g as De,h as Le,i as Ne,j as Fe,l as je,m as _e,o as A,p as Q}from"./chunk-LCIREYTD.js";import{a as m,b as N}from"./chunk-L2WSPY6S.js";import{a as Ke,b as Be,c as F,d as We}from"./chunk-VDMYBPYB.js";import{a as Qe,b as Ze,e as et}from"./chunk-DSYKYZMT.js";import{e as dt,g as pt,h as gt,j as mt}from"./chunk-CJQQIRPD.js";import"./chunk-BH3GTCZ6.js";import"./chunk-FIOB3MEX.js";Q();N();import{execa as Dt}from"execa";import{existsSync as de,promises as se}from"fs";import x from"path";import me from"node-fetch";async function Lt(n,e){let t=n.split("/");if(t.length<2)throw new Error(`Invalid skill package ID: ${n}. Expected format: owner/repo`);let s=t[0],i=t[1],o=t[2];try{let a=o?`${s}/${i}/${o}`:`${s}/${i}`;await Dt("npx",["-y","skills","add",a],{cwd:e,stdio:"pipe"}),m.success(`Installed skill package: ${n}`);let r=x.resolve(e,".skills",`${s}_${i}`);if(de(r))return await ge(r,n);let l=x.resolve(e,".skills");return de(l)?await ge(l,n):[]}catch{return m.info(`Fetching skills directly from GitHub: ${s}/${i}`),await Nt(s,i,o,e)}}async function Nt(n,e,t,s){let i=[];try{let o=`https://api.github.com/repos/${n}/${e}/git/trees/main?recursive=1`,a=await me(o);if(!a.ok)throw new Error(`GitHub API error: ${a.status}`);let l=(await a.json()).tree.filter(c=>c.type==="blob"&&c.path.endsWith("SKILL.md"));if(t){let c=l.find(g=>g.path.includes(`/${t}/`)||g.path===`${t}/SKILL.md`);if(c){let g=await pe(n,e,c.path,s);g&&i.push(g)}}else for(let c of l){let g=await pe(n,e,c.path,s);g&&i.push(g)}}catch(o){m.error(`Failed to fetch skills from GitHub: ${o.message}`)}return i}async function pe(n,e,t,s){try{let i=`https://raw.githubusercontent.com/${n}/${e}/main/${t}`,o=await me(i);if(!o.ok)return null;let a=await o.text(),r=F(a);if(r){r.source="remote",r.packageId=`${n}/${e}`;let l=x.dirname(t),c=x.resolve(s,".skills",`${n}_${e}`,l);await se.mkdir(c,{recursive:!0}),await se.writeFile(x.resolve(c,"SKILL.md"),a),r.path=x.resolve(c,"SKILL.md")}return r}catch{return null}}async function ge(n,e){let t=[],{default:s}=await import("fast-glob"),i=await s.glob("**/SKILL.md",{cwd:n,deep:5});for(let o of i)try{let a=x.resolve(n,o),r=await se.readFile(a,"utf8"),l=F(r);l&&(l.source="remote",l.path=a,l.packageId=e,t.push(l))}catch{}return t}async function Ft(n,e,t,s,i){let o=["---",`name: ${n}`,`description: ${e}`];if(s?.length){o.push("tags:");for(let a of s)o.push(` - ${a}`)}if(i?.length){o.push("globs:");for(let a of i)o.push(` - ${a}`)}return o.push("---"),`${o.join(`
2
2
  `)}
3
3
 
4
- ${t}`}async function Ot(n){let{loadLocalSkills:e}=await import("./loader-5CA3O5GM.js");return e(n)}async function Gt(n,e,t,s,i){let a=[{role:"system",content:`You are a skill author for the Agent Skills ecosystem (skills.sh).
4
+ ${t}`}async function jt(n){let{loadLocalSkills:e}=await import("./loader-BOKE5M5S.js");return e(n)}async function _t(n,e,t,s,i){let a=[{role:"system",content:`You are a skill author for the Agent Skills ecosystem (skills.sh).
5
5
  You create high-quality SKILL.md files that provide reusable instructions for AI coding agents.
6
6
 
7
7
  A skill is a markdown document with YAML frontmatter that teaches an agent how to perform a specific task.
@@ -23,7 +23,7 @@ The skill should contain detailed instructions for an AI agent to follow when pe
23
23
  1. Step-by-step instructions
24
24
  2. Code patterns and conventions to follow
25
25
  3. Common pitfalls to avoid
26
- 4. Examples where helpful`}],l=(await n.generate(a,{temperature:.7,maxTokens:4096})).content.trim(),c={frontmatter:{name:e,description:t},instructions:l,source:"generated"},g=l.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);return g&&(c.instructions=g[2].trim()),{skill:c,content:l}}import{existsSync as Dt,promises as ge}from"fs";import te from"path";var Lt={enabled:!0,autoSkills:!0,minFrequency:3,provider:"claude-code"},b=class{constructor(e,t,s){this.cwd=e;this.memory=t;this.config={...Lt,...s}}config;async enhance(){if(!this.config.enabled)return{skillsCreated:[],skillsUpdated:[],insights:[]};let e={skillsCreated:[],skillsUpdated:[],insights:[]};if(this.config.autoSkills){let i=await this.createSkillsFromPatterns();e.skillsCreated.push(...i)}let t=this.analyzeFailures();e.insights.push(...t);let s=this.analyzePreferences();return e.insights.push(...s),e}async createSkillsFromPatterns(){let t=this.memory.getPatterns().filter(o=>o.frequency>=this.config.minFrequency);if(!t.length)return[];let s=[],i=te.resolve(this.cwd,".skills","_auto");for(let o of t.slice(0,3)){let a=Nt(o),r=te.resolve(i,a,"SKILL.md");if(!Dt(r))try{let l=await this.generateSkillFromPattern(o);l&&(await ge.mkdir(te.dirname(r),{recursive:!0}),await ge.writeFile(r,l,"utf8"),s.push(a))}catch{}}return s}async generateSkillFromPattern(e){let t=this.memory.getRecentGenerations(20).filter(r=>r.success&&r.userFeedback!=="negative").slice(0,3);if(!t.length)return null;let s=A(this.config.provider,this.config.apiKey),i=await X(this.cwd),o=[{role:"system",content:`You are a skill author. Create a SKILL.md file that captures a successful pattern.
26
+ 4. Examples where helpful`}],l=(await n.generate(a,{temperature:.7,maxTokens:4096})).content.trim(),c={frontmatter:{name:e,description:t},instructions:l,source:"generated"},g=l.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);return g&&(c.instructions=g[2].trim()),{skill:c,content:l}}Q();import{existsSync as Ut,promises as fe}from"fs";import oe from"path";var Ht={enabled:!0,autoSkills:!0,minFrequency:3,provider:"claude-code"},$=class{constructor(e,t,s){this.cwd=e;this.memory=t;this.config={...Ht,...s}}config;async enhance(){if(!this.config.enabled)return{skillsCreated:[],skillsUpdated:[],insights:[]};let e={skillsCreated:[],skillsUpdated:[],insights:[]};if(this.config.autoSkills){let i=await this.createSkillsFromPatterns();e.skillsCreated.push(...i)}let t=this.analyzeFailures();e.insights.push(...t);let s=this.analyzePreferences();return e.insights.push(...s),e}async createSkillsFromPatterns(){let t=this.memory.getPatterns().filter(o=>o.frequency>=this.config.minFrequency);if(!t.length)return[];let s=[],i=oe.resolve(this.cwd,".skills","_auto");for(let o of t.slice(0,3)){let a=Jt(o),r=oe.resolve(i,a,"SKILL.md");if(!Ut(r))try{let l=await this.generateSkillFromPattern(o);l&&(await fe.mkdir(oe.dirname(r),{recursive:!0}),await fe.writeFile(r,l,"utf8"),s.push(a))}catch{}}return s}async generateSkillFromPattern(e){let t=this.memory.getRecentGenerations(20).filter(r=>r.success&&r.userFeedback!=="negative").slice(0,3);if(!t.length)return null;let s=A(this.config.provider,this.config.apiKey),i=await Z(this.cwd),o=[{role:"system",content:`You are a skill author. Create a SKILL.md file that captures a successful pattern.
27
27
  Tech stack: ${M(i)}
28
28
  Output ONLY the SKILL.md content with YAML frontmatter. No code fences.`},{role:"user",content:`Create a skill from this recurring pattern:
29
29
 
@@ -36,13 +36,13 @@ ${t.map(r=>`- "${r.task}" \u2192 ${r.files.join(", ")}`).join(`
36
36
  `)}
37
37
 
38
38
  Create a concise, reusable skill that captures what worked.`}];return(await s.generate(o,{maxTokens:2048,temperature:.7})).content.trim()||null}analyzeFailures(){let e=[],t=this.memory.getFailedGenerations(20);if(t.length<2)return e;let s=new Map;for(let o of t){let a=(o.error||"unknown").split(`
39
- `)[0].slice(0,80),r=s.get(a)||[];r.push(o),s.set(a,r)}for(let[o,a]of s)a.length>=2&&e.push(`Recurring error (${a.length}x): "${o}" \u2014 consider creating a skill to prevent this`);let i=this.memory.getStats();return i.successRate<.7&&i.totalGenerations>5&&e.push(`Success rate is ${(i.successRate*100).toFixed(0)}% \u2014 review recent failures and update skills`),e}analyzePreferences(){let e=[],s=this.memory.getPreferences().filter(i=>i.confidence>.8);return s.length&&e.push(`Strong preferences detected: ${s.map(i=>`${i.key}=${i.value}`).join(", ")}`),e}};function Nt(n){return n.description.toLowerCase().replace(/[^a-z0-9\s-]/g,"").replace(/\s+/g,"-").slice(0,40).replace(/-+$/,"")}var $=class{middleware=[];use(e,t){return this.middleware.push({name:e,fn:t}),this}async execute(e){let t={id:e.id,success:!1,files:[],content:"",outputType:e.outputType||"auto",duration:0},s={startTime:Date.now()},i=0,o=async()=>{if(i>=this.middleware.length)return;await this.middleware[i++].fn(e,t,s,o)};try{await o(),t.duration=Date.now()-s.startTime}catch(a){t.success=!1,t.error=a.message,t.duration=Date.now()-s.startTime}return t}getMiddlewareNames(){return this.middleware.map(e=>e.name)}};import{createServer as Ft}from"http";var jt={port:3170,host:"0.0.0.0",provider:"claude-code",cwd:process.cwd(),memory:{enabled:!0},heal:{enabled:!0},enhance:{enabled:!0,autoSkills:!0},cors:!0},J=class{config;memory;healEngine;enhanceEngine;pipeline;requestCount=0;log;constructor(e){this.config={...jt,...e},this.memory=new _(this.config.cwd),this.healEngine=new U(this.config.cwd,{enabled:this.config.heal.enabled,testCommand:this.config.heal.testCommand,buildCommand:this.config.heal.buildCommand,provider:this.config.provider,model:this.config.model,apiKey:this.config.apiKey}),this.enhanceEngine=new b(this.config.cwd,this.memory,{enabled:this.config.enhance.enabled,autoSkills:this.config.enhance.autoSkills,provider:this.config.provider,model:this.config.model,apiKey:this.config.apiKey}),this.pipeline=this.buildPipeline(),this.log=console.error.bind(console,"[agentx]")}buildPipeline(){let e=new $;return e.use("memory",this.memoryMiddleware()),e.use("context",this.contextMiddleware()),e.use("generate",this.generateMiddleware()),e.use("heal",this.healMiddleware()),e.use("record",this.recordMiddleware()),e.use("enhance",this.enhanceMiddleware()),e}async start(){await this.memory.load(),Ft(async(t,s)=>{if(this.config.cors&&(s.setHeader("Access-Control-Allow-Origin","*"),s.setHeader("Access-Control-Allow-Methods","GET, POST, OPTIONS"),s.setHeader("Access-Control-Allow-Headers","Content-Type, Authorization"),t.method==="OPTIONS")){s.writeHead(204),s.end();return}await this.handleRequest(t,s)}).listen(this.config.port,this.config.host,()=>{this.log(`
40
- agentx runtime v0.1.0`),this.log(` Listening on http://${this.config.host}:${this.config.port}`),this.log(` Provider: ${this.config.provider}`),this.log(` Memory: ${this.config.memory.enabled?"enabled":"disabled"}`),this.log(` Auto-heal: ${this.config.heal.enabled?"enabled":"disabled"}`),this.log(` Self-enhance: ${this.config.enhance.enabled?"enabled":"disabled"}`),this.log(` Pipeline: ${this.pipeline.getMiddlewareNames().join(" \u2192 ")}`),this.log(` Working dir: ${this.config.cwd}`),this.log(""),this.log(" Endpoints:"),this.log(" POST /generate \u2014 generate code/content"),this.log(" POST /evolve \u2014 transform existing code"),this.log(" GET /inspect \u2014 project analysis"),this.log(" GET /memory \u2014 view learning history"),this.log(" POST /feedback \u2014 provide feedback on a generation"),this.log(" GET /health \u2014 health check"),this.log(" POST /enhance \u2014 trigger self-enhancement"),this.log("")})}async handleRequest(e,t){let s=new URL(e.url||"/",`http://${e.headers.host||"localhost"}`),i=e.method||"GET",o=s.pathname;this.log(`${i} ${o}`);try{switch(`${i} ${o}`){case"POST /generate":await this.handleGenerate(e,t);break;case"POST /evolve":await this.handleEvolve(e,t);break;case"GET /inspect":await this.handleInspect(t);break;case"GET /memory":await this.handleMemory(t);break;case"POST /feedback":await this.handleFeedback(e,t);break;case"GET /health":this.sendJson(t,200,{status:"ok",uptime:process.uptime(),requests:this.requestCount,stats:this.memory.getStats(),pipeline:this.pipeline.getMiddlewareNames()});break;case"POST /enhance":await this.handleEnhance(t);break;default:this.sendJson(t,404,{error:"Not found",endpoints:["POST /generate","POST /evolve","GET /inspect","GET /memory","POST /feedback","GET /health","POST /enhance"]})}}catch(a){this.log("Error:",a.message),this.sendJson(t,500,{error:a.message})}this.requestCount++}async handleGenerate(e,t){let s=await se(e);if(!s.task){this.sendJson(t,400,{error:"Missing required field: task"});return}let i={id:`req-${Date.now().toString(36)}`,task:s.task,outputType:s.type||s.outputType||"auto",outputDir:s.outputDir||s.output_dir,provider:s.provider||this.config.provider,model:s.model||this.config.model,apiKey:s.apiKey||s.api_key||this.config.apiKey,cwd:this.config.cwd,overwrite:s.overwrite??!0,metadata:s.metadata},o=await this.pipeline.execute(i);this.sendJson(t,o.success?200:500,o)}async handleEvolve(e,t){let s=await se(e);if(!s.task||!s.glob){this.sendJson(t,400,{error:"Missing required fields: task, glob"});return}this.sendJson(t,200,{message:'Use the CLI for evolve: agentx evolve "'+s.task+'" --glob "'+s.glob+'"',hint:"The evolve endpoint requires interactive diff review. Use the CLI for full functionality."})}async handleInspect(e){let t=await H(this.config.cwd,"inspect",{context7:{enabled:!1}});this.sendJson(e,200,{techStack:{languages:t.techStack.languages,frameworks:t.techStack.frameworks,packageManager:t.techStack.packageManager,databases:t.techStack.databases,styling:t.techStack.styling,testing:t.techStack.testing,deployment:t.techStack.deployment,monorepo:t.techStack.monorepo},schemas:{database:t.schemas.database?{type:t.schemas.database.type,tables:t.schemas.database.tables}:null,api:t.schemas.api?{type:t.schemas.api.type}:null,env:t.schemas.env,models:t.schemas.models?.map(s=>({path:s.path,type:s.type}))},skills:t.skills.map(s=>({name:s.frontmatter.name,description:s.frontmatter.description,source:s.source,tags:s.frontmatter.tags})),dependencies:Object.keys(t.techStack.dependencies).length,devDependencies:Object.keys(t.techStack.devDependencies).length})}async handleMemory(e){this.sendJson(e,200,{stats:this.memory.getStats(),recent:this.memory.getRecentGenerations(10),patterns:this.memory.getPatterns().slice(0,10),preferences:this.memory.getPreferences()})}async handleFeedback(e,t){let s=await se(e);if(!s.entryId||!s.feedback){this.sendJson(t,400,{error:"Missing required fields: entryId, feedback (positive/negative/neutral)"});return}await this.memory.recordFeedback(s.entryId,s.feedback),this.sendJson(t,200,{recorded:!0})}async handleEnhance(e){let t=await this.enhanceEngine.enhance();this.sendJson(e,200,t)}memoryMiddleware(){let e=this.memory;return async(t,s,i,o)=>{i.memory=e;let a=e.buildMemoryContext(t.task);a&&(i.memoryContext=a),await o()}}contextMiddleware(){return async(e,t,s,i)=>{s.agentContext=await H(e.cwd,e.task,{provider:e.provider,context7:{enabled:!0}}),await i()}}generateMiddleware(){return async(e,t,s,i)=>{let o=await E({task:s.memoryContext?`${e.task}
39
+ `)[0].slice(0,80),r=s.get(a)||[];r.push(o),s.set(a,r)}for(let[o,a]of s)a.length>=2&&e.push(`Recurring error (${a.length}x): "${o}" \u2014 consider creating a skill to prevent this`);let i=this.memory.getStats();return i.successRate<.7&&i.totalGenerations>5&&e.push(`Success rate is ${(i.successRate*100).toFixed(0)}% \u2014 review recent failures and update skills`),e}analyzePreferences(){let e=[],s=this.memory.getPreferences().filter(i=>i.confidence>.8);return s.length&&e.push(`Strong preferences detected: ${s.map(i=>`${i.key}=${i.value}`).join(", ")}`),e}};function Jt(n){return n.description.toLowerCase().replace(/[^a-z0-9\s-]/g,"").replace(/\s+/g,"-").slice(0,40).replace(/-+$/,"")}var b=class{middleware=[];use(e,t){return this.middleware.push({name:e,fn:t}),this}async execute(e){let t={id:e.id,success:!1,files:[],content:"",outputType:e.outputType||"auto",duration:0},s={startTime:Date.now()},i=0,o=async()=>{if(i>=this.middleware.length)return;await this.middleware[i++].fn(e,t,s,o)};try{await o(),t.duration=Date.now()-s.startTime}catch(a){t.success=!1,t.error=a.message,t.duration=Date.now()-s.startTime}return t}getMiddlewareNames(){return this.middleware.map(e=>e.name)}};import{createServer as Kt}from"http";var Bt={port:3170,host:"0.0.0.0",provider:"claude-code",cwd:process.cwd(),memory:{enabled:!0},heal:{enabled:!0},enhance:{enabled:!0,autoSkills:!0},cors:!0},K=class{config;memory;healEngine;enhanceEngine;pipeline;requestCount=0;log;constructor(e){this.config={...Bt,...e},this.memory=new U(this.config.cwd),this.healEngine=new H(this.config.cwd,{enabled:this.config.heal.enabled,testCommand:this.config.heal.testCommand,buildCommand:this.config.heal.buildCommand,provider:this.config.provider,model:this.config.model,apiKey:this.config.apiKey}),this.enhanceEngine=new $(this.config.cwd,this.memory,{enabled:this.config.enhance.enabled,autoSkills:this.config.enhance.autoSkills,provider:this.config.provider,model:this.config.model,apiKey:this.config.apiKey}),this.pipeline=this.buildPipeline(),this.log=console.error.bind(console,"[agentx]")}buildPipeline(){let e=new b;return e.use("memory",this.memoryMiddleware()),e.use("context",this.contextMiddleware()),e.use("generate",this.generateMiddleware()),e.use("heal",this.healMiddleware()),e.use("record",this.recordMiddleware()),e.use("enhance",this.enhanceMiddleware()),e}async start(){await this.memory.load(),Kt(async(t,s)=>{if(this.config.cors&&(s.setHeader("Access-Control-Allow-Origin","*"),s.setHeader("Access-Control-Allow-Methods","GET, POST, OPTIONS"),s.setHeader("Access-Control-Allow-Headers","Content-Type, Authorization"),t.method==="OPTIONS")){s.writeHead(204),s.end();return}await this.handleRequest(t,s)}).listen(this.config.port,this.config.host,()=>{this.log(`
40
+ agentx runtime v0.1.0`),this.log(` Listening on http://${this.config.host}:${this.config.port}`),this.log(` Provider: ${this.config.provider}`),this.log(` Memory: ${this.config.memory.enabled?"enabled":"disabled"}`),this.log(` Auto-heal: ${this.config.heal.enabled?"enabled":"disabled"}`),this.log(` Self-enhance: ${this.config.enhance.enabled?"enabled":"disabled"}`),this.log(` Pipeline: ${this.pipeline.getMiddlewareNames().join(" \u2192 ")}`),this.log(` Working dir: ${this.config.cwd}`),this.log(""),this.log(" Endpoints:"),this.log(" POST /generate \u2014 generate code/content"),this.log(" POST /evolve \u2014 transform existing code"),this.log(" GET /inspect \u2014 project analysis"),this.log(" GET /memory \u2014 view learning history"),this.log(" POST /feedback \u2014 provide feedback on a generation"),this.log(" GET /health \u2014 health check"),this.log(" POST /enhance \u2014 trigger self-enhancement"),this.log("")})}async handleRequest(e,t){let s=new URL(e.url||"/",`http://${e.headers.host||"localhost"}`),i=e.method||"GET",o=s.pathname;this.log(`${i} ${o}`);try{switch(`${i} ${o}`){case"POST /generate":await this.handleGenerate(e,t);break;case"POST /evolve":await this.handleEvolve(e,t);break;case"GET /inspect":await this.handleInspect(t);break;case"GET /memory":await this.handleMemory(t);break;case"POST /feedback":await this.handleFeedback(e,t);break;case"GET /health":this.sendJson(t,200,{status:"ok",uptime:process.uptime(),requests:this.requestCount,stats:this.memory.getStats(),pipeline:this.pipeline.getMiddlewareNames()});break;case"POST /enhance":await this.handleEnhance(t);break;default:this.sendJson(t,404,{error:"Not found",endpoints:["POST /generate","POST /evolve","GET /inspect","GET /memory","POST /feedback","GET /health","POST /enhance"]})}}catch(a){this.log("Error:",a.message),this.sendJson(t,500,{error:a.message})}this.requestCount++}async handleGenerate(e,t){let s=await ne(e);if(!s.task){this.sendJson(t,400,{error:"Missing required field: task"});return}let i={id:`req-${Date.now().toString(36)}`,task:s.task,outputType:s.type||s.outputType||"auto",outputDir:s.outputDir||s.output_dir,provider:s.provider||this.config.provider,model:s.model||this.config.model,apiKey:s.apiKey||s.api_key||this.config.apiKey,cwd:this.config.cwd,overwrite:s.overwrite??!0,metadata:s.metadata},o=await this.pipeline.execute(i);this.sendJson(t,o.success?200:500,o)}async handleEvolve(e,t){let s=await ne(e);if(!s.task||!s.glob){this.sendJson(t,400,{error:"Missing required fields: task, glob"});return}this.sendJson(t,200,{message:'Use the CLI for evolve: agentx evolve "'+s.task+'" --glob "'+s.glob+'"',hint:"The evolve endpoint requires interactive diff review. Use the CLI for full functionality."})}async handleInspect(e){let t=await J(this.config.cwd,"inspect",{context7:{enabled:!1}});this.sendJson(e,200,{techStack:{languages:t.techStack.languages,frameworks:t.techStack.frameworks,packageManager:t.techStack.packageManager,databases:t.techStack.databases,styling:t.techStack.styling,testing:t.techStack.testing,deployment:t.techStack.deployment,monorepo:t.techStack.monorepo},schemas:{database:t.schemas.database?{type:t.schemas.database.type,tables:t.schemas.database.tables}:null,api:t.schemas.api?{type:t.schemas.api.type}:null,env:t.schemas.env,models:t.schemas.models?.map(s=>({path:s.path,type:s.type}))},skills:t.skills.map(s=>({name:s.frontmatter.name,description:s.frontmatter.description,source:s.source,tags:s.frontmatter.tags})),dependencies:Object.keys(t.techStack.dependencies).length,devDependencies:Object.keys(t.techStack.devDependencies).length})}async handleMemory(e){this.sendJson(e,200,{stats:this.memory.getStats(),recent:this.memory.getRecentGenerations(10),patterns:this.memory.getPatterns().slice(0,10),preferences:this.memory.getPreferences()})}async handleFeedback(e,t){let s=await ne(e);if(!s.entryId||!s.feedback){this.sendJson(t,400,{error:"Missing required fields: entryId, feedback (positive/negative/neutral)"});return}await this.memory.recordFeedback(s.entryId,s.feedback),this.sendJson(t,200,{recorded:!0})}async handleEnhance(e){let t=await this.enhanceEngine.enhance();this.sendJson(e,200,t)}memoryMiddleware(){let e=this.memory;return async(t,s,i,o)=>{i.memory=e;let a=e.buildMemoryContext(t.task);a&&(i.memoryContext=a),await o()}}contextMiddleware(){return async(e,t,s,i)=>{s.agentContext=await J(e.cwd,e.task,{provider:e.provider,context7:{enabled:!0}}),await i()}}generateMiddleware(){return async(e,t,s,i)=>{let o=await E({task:s.memoryContext?`${e.task}
41
41
 
42
- ${s.memoryContext}`:e.task,outputType:e.outputType,outputDir:e.outputDir,overwrite:e.overwrite??!0,cwd:e.cwd,provider:e.provider||this.config.provider,model:e.model||this.config.model,apiKey:e.apiKey||this.config.apiKey,context7:!0,interactive:!1,maxSteps:5});t.success=o.files.errors.length===0,t.files=o.files.written.map(a=>({path:a})),t.content=o.content,t.outputType=o.outputType,t.tokensUsed=o.tokensUsed,await i()}}healMiddleware(){let e=this.healEngine;return async(t,s,i,o)=>{if(this.config.heal.enabled&&s.files.length>0){let a=await e.detectAndHeal(s.files.map(r=>r.path),t.task,s.memoryEntryId);a.attempts>0&&(s.healed=a.healed,s.healAttempts=a.attempts,a.healed&&(s.success=!0))}await o()}}recordMiddleware(){let e=this.memory;return async(t,s,i,o)=>{if(this.config.memory.enabled){let a=await e.recordGeneration({task:t.task,outputType:s.outputType,files:s.files.map(r=>r.path),success:s.success,error:s.error,context:{techStack:i.agentContext?.techStack.languages.map(r=>r.name),frameworks:i.agentContext?.techStack.frameworks.map(r=>r.name)}});s.memoryEntryId=a,t.outputType&&t.outputType!=="auto"&&await e.learnPreference("preferred-output-type",t.outputType,`generation request: ${t.task.slice(0,50)}`)}await o()}}enhanceMiddleware(){let e=this.enhanceEngine;return async(t,s,i,o)=>{this.config.enhance.enabled&&this.requestCount%10===0&&this.requestCount>0&&e.enhance().then(a=>{if(a.skillsCreated.length&&this.log(`Auto-created ${a.skillsCreated.length} skill(s): ${a.skillsCreated.join(", ")}`),a.insights.length)for(let r of a.insights)this.log(`Insight: ${r}`)}).catch(()=>{}),await o()}}sendJson(e,t,s){e.writeHead(t,{"Content-Type":"application/json"}),e.end(JSON.stringify(s,null,2))}};async function se(n){return new Promise((e,t)=>{let s="";n.on("data",i=>s+=i),n.on("end",()=>{try{e(s?JSON.parse(s):{})}catch{e({})}}),n.on("error",t)})}import{execa as f}from"execa";var w=class{constructor(e){this.cwd=e}async isRepo(){try{return await f("git",["rev-parse","--is-inside-work-tree"],{cwd:this.cwd,reject:!1}),!0}catch{return!1}}async status(){let t=(await f("git",["status","--porcelain","-b"],{cwd:this.cwd,reject:!1})).stdout.trim().split(`
43
- `).filter(Boolean),s="unknown",i=[],o=[],a=[],r=[];for(let l of t){if(l.startsWith("## ")){s=l.slice(3).split("...")[0];continue}let c=l[0],g=l[1],h=l.slice(3).trim();(c==="A"||c==="M"||c==="R")&&i.push(h),c==="D"&&(r.push(h),i.push(h)),g==="M"&&o.push(h),g==="D"&&r.push(h),c==="?"&&g==="?"&&a.push(h)}return{staged:i,modified:o,untracked:a,deleted:[...new Set(r)],branch:s,isClean:i.length===0&&o.length===0&&a.length===0}}async diff(e=!1){return(await f("git",e?["diff","--cached"]:["diff"],{cwd:this.cwd,reject:!1})).stdout}async diffStat(e=!1){let s=await f("git",e?["diff","--cached","--numstat"]:["diff","--numstat"],{cwd:this.cwd,reject:!1}),i=[];for(let o of s.stdout.trim().split(`
44
- `).filter(Boolean)){let[a,r,l]=o.split(" ");if(!l)continue;let c="modified";a==="-"&&r==="-"&&(c="renamed"),i.push({path:l,status:c,additions:parseInt(a)||0,deletions:parseInt(r)||0})}return i}async log(e=10){let t=await f("git",["log",`--max-count=${e}`,"--format=%H|%h|%s|%an|%ai"],{cwd:this.cwd,reject:!1});return t.stdout.trim()?t.stdout.trim().split(`
45
- `).filter(Boolean).map(s=>{let[i,o,a,r,l]=s.split("|");return{hash:i,shortHash:o,message:a,author:r,date:l}}):[]}async add(e){e.length&&await f("git",["add",...e],{cwd:this.cwd})}async addAll(){await f("git",["add","-A"],{cwd:this.cwd})}async commit(e){let t=await f("git",["commit","-m",e],{cwd:this.cwd,reject:!1});if(t.exitCode!==0)throw new Error(t.stderr||t.stdout||"Git commit failed");let i=t.stdout.match(/\[[\w/.-]+\s+(\w+)\]/)?.[1]||"unknown",o=t.stdout.match(/(\d+)\s+files?\s+changed/),a=parseInt(o?.[1]||"0");return{hash:i,message:e,filesChanged:a}}async currentBranch(){return(await f("git",["branch","--show-current"],{cwd:this.cwd,reject:!1})).stdout.trim()}async createBranch(e){await f("git",["checkout","-b",e],{cwd:this.cwd})}async checkout(e){await f("git",["checkout",e],{cwd:this.cwd})}async stash(e){let t=["stash","push"];e&&t.push("-m",e),await f("git",t,{cwd:this.cwd})}async stashPop(){await f("git",["stash","pop"],{cwd:this.cwd})}async generateCommitMessage(e){let t=await this.diff(!0);if(!t.trim())throw new Error("No staged changes to commit");return e?(await e.generate([{role:"system",content:`You are a git commit message generator. Generate a conventional commit message (type(scope): subject) from the given diff.
42
+ ${s.memoryContext}`:e.task,outputType:e.outputType,outputDir:e.outputDir,overwrite:e.overwrite??!0,cwd:e.cwd,provider:e.provider||this.config.provider,model:e.model||this.config.model,apiKey:e.apiKey||this.config.apiKey,context7:!0,interactive:!1,maxSteps:5});t.success=o.files.errors.length===0,t.files=o.files.written.map(a=>({path:a})),t.content=o.content,t.outputType=o.outputType,t.tokensUsed=o.tokensUsed,await i()}}healMiddleware(){let e=this.healEngine;return async(t,s,i,o)=>{if(this.config.heal.enabled&&s.files.length>0){let a=await e.detectAndHeal(s.files.map(r=>r.path),t.task,s.memoryEntryId);a.attempts>0&&(s.healed=a.healed,s.healAttempts=a.attempts,a.healed&&(s.success=!0))}await o()}}recordMiddleware(){let e=this.memory;return async(t,s,i,o)=>{if(this.config.memory.enabled){let a=await e.recordGeneration({task:t.task,outputType:s.outputType,files:s.files.map(r=>r.path),success:s.success,error:s.error,context:{techStack:i.agentContext?.techStack.languages.map(r=>r.name),frameworks:i.agentContext?.techStack.frameworks.map(r=>r.name)}});s.memoryEntryId=a,t.outputType&&t.outputType!=="auto"&&await e.learnPreference("preferred-output-type",t.outputType,`generation request: ${t.task.slice(0,50)}`)}await o()}}enhanceMiddleware(){let e=this.enhanceEngine;return async(t,s,i,o)=>{this.config.enhance.enabled&&this.requestCount%10===0&&this.requestCount>0&&e.enhance().then(a=>{if(a.skillsCreated.length&&this.log(`Auto-created ${a.skillsCreated.length} skill(s): ${a.skillsCreated.join(", ")}`),a.insights.length)for(let r of a.insights)this.log(`Insight: ${r}`)}).catch(()=>{}),await o()}}sendJson(e,t,s){e.writeHead(t,{"Content-Type":"application/json"}),e.end(JSON.stringify(s,null,2))}};async function ne(n){return new Promise((e,t)=>{let s="";n.on("data",i=>s+=i),n.on("end",()=>{try{e(s?JSON.parse(s):{})}catch{e({})}}),n.on("error",t)})}import{execa as u}from"execa";var w=class{constructor(e){this.cwd=e}async isRepo(){try{return await u("git",["rev-parse","--is-inside-work-tree"],{cwd:this.cwd,reject:!1}),!0}catch{return!1}}async status(){let t=(await u("git",["status","--porcelain","-b"],{cwd:this.cwd,reject:!1})).stdout.trim().split(`
43
+ `).filter(Boolean),s="unknown",i=[],o=[],a=[],r=[];for(let l of t){if(l.startsWith("## ")){s=l.slice(3).split("...")[0];continue}let c=l[0],g=l[1],h=l.slice(3).trim();(c==="A"||c==="M"||c==="R")&&i.push(h),c==="D"&&(r.push(h),i.push(h)),g==="M"&&o.push(h),g==="D"&&r.push(h),c==="?"&&g==="?"&&a.push(h)}return{staged:i,modified:o,untracked:a,deleted:[...new Set(r)],branch:s,isClean:i.length===0&&o.length===0&&a.length===0}}async diff(e=!1){return(await u("git",e?["diff","--cached"]:["diff"],{cwd:this.cwd,reject:!1})).stdout}async diffStat(e=!1){let s=await u("git",e?["diff","--cached","--numstat"]:["diff","--numstat"],{cwd:this.cwd,reject:!1}),i=[];for(let o of s.stdout.trim().split(`
44
+ `).filter(Boolean)){let[a,r,l]=o.split(" ");if(!l)continue;let c="modified";a==="-"&&r==="-"&&(c="renamed"),i.push({path:l,status:c,additions:parseInt(a)||0,deletions:parseInt(r)||0})}return i}async log(e=10){let t=await u("git",["log",`--max-count=${e}`,"--format=%H|%h|%s|%an|%ai"],{cwd:this.cwd,reject:!1});return t.stdout.trim()?t.stdout.trim().split(`
45
+ `).filter(Boolean).map(s=>{let[i,o,a,r,l]=s.split("|");return{hash:i,shortHash:o,message:a,author:r,date:l}}):[]}async add(e){e.length&&await u("git",["add",...e],{cwd:this.cwd})}async addAll(){await u("git",["add","-A"],{cwd:this.cwd})}async commit(e){let t=await u("git",["commit","-m",e],{cwd:this.cwd,reject:!1});if(t.exitCode!==0)throw new Error(t.stderr||t.stdout||"Git commit failed");let i=t.stdout.match(/\[[\w/.-]+\s+(\w+)\]/)?.[1]||"unknown",o=t.stdout.match(/(\d+)\s+files?\s+changed/),a=parseInt(o?.[1]||"0");return{hash:i,message:e,filesChanged:a}}async currentBranch(){return(await u("git",["branch","--show-current"],{cwd:this.cwd,reject:!1})).stdout.trim()}async createBranch(e){await u("git",["checkout","-b",e],{cwd:this.cwd})}async checkout(e){await u("git",["checkout",e],{cwd:this.cwd})}async stash(e){let t=["stash","push"];e&&t.push("-m",e),await u("git",t,{cwd:this.cwd})}async stashPop(){await u("git",["stash","pop"],{cwd:this.cwd})}async generateCommitMessage(e){let t=await this.diff(!0);if(!t.trim())throw new Error("No staged changes to commit");return e?(await e.generate([{role:"system",content:`You are a git commit message generator. Generate a conventional commit message (type(scope): subject) from the given diff.
46
46
  Rules:
47
47
  - Use conventional commit format: feat|fix|refactor|docs|test|chore|style(scope): message
48
48
  - Keep the subject line under 72 characters
@@ -51,13 +51,13 @@ Rules:
51
51
 
52
52
  ${t.slice(0,4e3)}`}])).content.trim().split(`
53
53
  `)[0]:this.fallbackCommitMessage(t)}fallbackCommitMessage(e){let t=e.split(`
54
- `),s=[];for(let i of t)if(i.startsWith("diff --git")){let o=i.match(/b\/(.+)$/);o&&s.push(o[1])}return s.length===0?"chore: update files":s.length===1?`chore: update ${s[0]}`:`chore: update ${s.length} files`}};import{createInterface as qt}from"readline";import v from"chalk";import Vt from"ora";import{existsSync as me,mkdirSync as _t,readFileSync as oe,readdirSync as ue,writeFileSync as Ut}from"fs";import O from"path";import Ht from"os";var S=O.join(Ht.homedir(),".agentx","sessions");function ne(){me(S)||_t(S,{recursive:!0})}function T(n){return{id:Jt(),createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),cwd:n,messages:[],tokensUsed:0,filesGenerated:[]}}function R(n){ne();let e=O.join(S,`${n.id}.json`);n.updatedAt=new Date().toISOString(),Ut(e,JSON.stringify(n,null,2),"utf8")}function C(n){let e=O.join(S,`${n}.json`);if(!me(e))return null;try{return JSON.parse(oe(e,"utf8"))}catch{return null}}function K(){ne();let n=ue(S).filter(t=>t.endsWith(".json")).map(t=>({name:t,path:O.join(S,t)}));if(!n.length)return null;let e=null;for(let t of n)try{let s=JSON.parse(oe(t.path,"utf8"));(!e||s.updatedAt>e.session.updatedAt)&&(e={name:t.name,session:s})}catch{}return e?.session??null}function B(){ne();let n=ue(S).filter(t=>t.endsWith(".json")),e=[];for(let t of n)try{let s=JSON.parse(oe(O.join(S,t),"utf8"));e.push(s)}catch{}return e.sort((t,s)=>s.updatedAt.localeCompare(t.updatedAt)),e}function Jt(){return Math.random().toString(36).slice(2,10)+Date.now().toString(36).slice(-4)}import p from"chalk";import{writeFileSync as Kt}from"fs";import Bt from"path";import d from"chalk";function fe(n,e){console.log(),console.log(d.bold.cyan(" agentx")+d.dim(` v${n}`)),console.log(d.dim(` Session: ${e}`)),console.log(d.dim(" Type /help for commands, /quit to exit")),console.log()}function he(n){if(n.written.length){console.log(),console.log(d.green(` Created ${n.written.length} file(s):`));for(let e of n.written)console.log(` ${d.green("+")} ${e}`)}if(n.skipped.length){console.log(),console.log(d.yellow(` Skipped ${n.skipped.length} file(s):`));for(let e of n.skipped)console.log(` ${d.yellow("~")} ${e}`)}if(n.errors.length){console.log(),console.log(d.red(` Failed ${n.errors.length} file(s):`));for(let e of n.errors)console.log(` ${d.red("x")} ${e}`)}}function G(n){let e=n/1e6*9;console.log(),console.log(d.dim(` Tokens: ${n.toLocaleString()} | Est. cost: $${e.toFixed(4)}`))}function ye(n){process.stdout.write(n)}function ke(){console.log(),console.log(d.bold(" Commands:")),console.log(),console.log(` ${d.cyan("/help")} Show this help`),console.log(` ${d.cyan("/clear")} Clear conversation history`),console.log(` ${d.cyan("/save")} Save current session`),console.log(` ${d.cyan("/load")} Load a saved session`),console.log(` ${d.cyan("/undo")} Undo last generation`),console.log(` ${d.cyan("/cost")} Show token usage and cost breakdown`),console.log(` ${d.cyan("/export")} Export session as markdown`),console.log(` ${d.cyan("/files")} List generated files`),console.log(` ${d.cyan("/context")} Show session context info`),console.log(` ${d.cyan("/memory")} Show memory stats and preferences`),console.log(` ${d.cyan("/mode")} Switch permission mode`),console.log(` ${d.cyan("/commit")} Commit generated files with AI message`),console.log(` ${d.cyan("/diff")} Show git diff`),console.log(` ${d.cyan("/status")} Show git status`),console.log(` ${d.cyan("/quit")} Exit the REPL`),console.log()}function we(n){if(console.log(),console.log(d.dim(` Branch: ${n.branch}`)),n.isClean){console.log(d.green(" Working tree clean"));return}n.staged.length&&console.log(d.green(` Staged: ${n.staged.length}`)),n.modified.length&&console.log(d.yellow(` Modified: ${n.modified.length}`)),n.untracked.length&&console.log(d.dim(` Untracked: ${n.untracked.length}`)),console.log()}function Se(n){if(console.log(),console.log(d.bold(" Cost Breakdown")),console.log(),console.log(d.dim(` Total: ${n.totalTokens.toLocaleString()} tokens ($${n.totalCost.toFixed(4)})`)),console.log(d.dim(` Input: ${n.totalInputTokens.toLocaleString()} | Output: ${n.totalOutputTokens.toLocaleString()}`)),Object.keys(n.models).length){console.log(),console.log(d.dim(" Per model:"));for(let[e,t]of Object.entries(n.models))console.log(` ${d.cyan(e)}: ${(t.inputTokens+t.outputTokens).toLocaleString()} tokens, $${t.cost.toFixed(4)} (${t.steps} step${t.steps!==1?"s":""})`)}if(n.steps.length>1){console.log(),console.log(d.dim(" Per step:"));for(let e of n.steps)console.log(` Step ${e.step}: ${(e.inputTokens+e.outputTokens).toLocaleString()} tokens ($${e.cost.toFixed(4)})`)}console.log()}function ve(n){console.log(),console.log(d.bold(" Plan Preview")),console.log(d.dim(" No files will be written in plan mode.")),console.log();for(let e of n){let t=e.action==="create"?d.green("+"):d.yellow("~");console.log(` ${t} ${e.path} (${e.action})`)}console.log()}import Wt from"prompts";var xe={};function u(n,e){xe[n]=e}function W(n){return xe[n]}function q(n){return n.startsWith("/")}function V(n){let e=n.trim(),t=e.indexOf(" ");return t===-1?{name:e.slice(1),args:""}:{name:e.slice(1,t),args:e.slice(t+1).trim()}}u("help",async()=>(ke(),!0));u("quit",async()=>!1);u("exit",async()=>!1);u("q",async()=>!1);u("clear",async(n,e)=>(e.session.messages=[],console.log(p.dim(" Conversation cleared")),!0));u("save",async(n,e)=>(R(e.session),console.log(p.dim(` Session saved: ${e.session.id}`)),!0));u("load",async(n,e)=>{let t=null;if(n){if(t=C(n),!t)return m.warn(`Session not found: ${n}`),!0}else{let s=B();if(!s.length)return m.info("No saved sessions"),!0;let{sessionId:i}=await Wt({type:"select",name:"sessionId",message:"Select a session",choices:s.slice(0,10).map(o=>({title:`${o.id} \u2014 ${new Date(o.updatedAt).toLocaleDateString()} (${o.messages.length} messages)`,value:o.id}))});if(!i)return!0;t=C(i)}return t&&(e.onSessionChange(t),console.log(p.dim(` Loaded session: ${t.id} (${t.messages.length} messages)`))),!0});u("undo",async(n,e)=>{let t=e.session.messages;return t.length<2?(m.info("Nothing to undo"),!0):(t[t.length-1]?.role==="assistant"&&t.pop(),t[t.length-1]?.role==="user"&&t.pop(),console.log(p.dim(" Undid last exchange")),!0)});u("cost",async(n,e)=>{let t=F.getSummary();return t.steps.length>0?Se(t):G(e.session.tokensUsed),!0});u("export",async(n,e)=>{let t=F.getSummary(),s=Q(e.session,t.steps.length?t:void 0),i=n||`session-${e.session.id}.md`,o=Bt.resolve(e.cwd,i);return Kt(o,s,"utf8"),m.success(` Session exported to ${o}`),!0});u("files",async(n,e)=>{let t=e.session.filesGenerated;if(!t.length)return m.info("No files generated in this session"),!0;console.log(),console.log(p.dim(` Files generated (${t.length}):`));for(let s of t)console.log(` ${p.green("+")} ${s}`);return console.log(),!0});u("context",async(n,e)=>(console.log(),console.log(p.dim(` Session: ${e.session.id}`)),console.log(p.dim(` CWD: ${e.session.cwd}`)),console.log(p.dim(` Messages: ${e.session.messages.length}`)),console.log(p.dim(` Tokens: ${e.session.tokensUsed.toLocaleString()}`)),console.log(p.dim(` Files: ${e.session.filesGenerated.length}`)),console.log(p.dim(` Created: ${new Date(e.session.createdAt).toLocaleString()}`)),console.log(),!0));u("memory",async(n,e)=>{try{let t=new Z(e.cwd);await t.load();let s=t.getStats(),i=t.getPreferences(),o=t.getPatterns(),a=t.getRecentGenerations(5);if(console.log(),console.log(p.bold(" Memory")),console.log(),console.log(p.dim(" Project:")),console.log(p.dim(` Generations: ${s.project.totalGenerations}`)),console.log(p.dim(` Success rate: ${(s.project.successRate*100).toFixed(0)}%`)),console.log(p.dim(` Heals: ${s.project.totalHeals}`)),console.log(),console.log(p.dim(" Global:")),console.log(p.dim(` Generations: ${s.user.totalGenerations}`)),console.log(p.dim(` Success rate: ${(s.user.successRate*100).toFixed(0)}%`)),i.length){console.log(),console.log(p.dim(" Preferences:"));for(let r of i.slice(0,10))console.log(p.dim(` ${r.key}: ${r.value} (${(r.confidence*100).toFixed(0)}%)`))}if(o.length){console.log(),console.log(p.dim(" Patterns:"));for(let r of o.slice(0,5))console.log(p.dim(` ${r.description} (${r.frequency}x)`))}if(a.length){console.log(),console.log(p.dim(" Recent:"));for(let r of a){let l=r.success?p.green("ok"):p.red("fail");console.log(p.dim(` [${l}] ${r.task.slice(0,60)}`))}}console.log()}catch(t){m.error(` ${t.message}`)}return!0});u("mode",async(n,e)=>{if(n&&j.includes(n))P.setMode(n),m.success(` Permission mode: ${n}`);else if(n)m.warn(` Unknown mode: ${n}. Valid modes: ${j.join(", ")}`);else{let t=P.getMode();console.log(),console.log(p.dim(` Current mode: ${p.bold(t)}`)),console.log(),console.log(p.dim(" Available modes:")),console.log(p.dim(" default \u2014 confirm each file write")),console.log(p.dim(" acceptEdits \u2014 auto-allow writes, confirm destructive ops")),console.log(p.dim(" plan \u2014 show plan without writing")),console.log(p.dim(" yolo \u2014 auto-allow everything")),console.log(),console.log(p.dim(" Usage: /mode <mode>")),console.log()}return!0});u("commit",async(n,e)=>{try{let t=new w(e.cwd);if(!await t.isRepo())return m.warn("Not a git repository"),!0;let s=e.session.filesGenerated.filter(r=>r);if(s.length&&(await t.add(s),console.log(p.dim(` Staged ${s.length} generated file(s)`))),(await t.status()).staged.length===0)return m.warn("Nothing staged to commit"),!0;let o;try{let r=A();o=await t.generateCommitMessage(r)}catch{o=await t.generateCommitMessage()}console.log(p.dim(` Message: ${o}`));let a=await t.commit(o);m.success(` [${a.hash}] ${a.message}`)}catch(t){m.error(` ${t.message}`)}return!0});u("diff",async(n,e)=>{try{let s=await new w(e.cwd).diff();s.trim()?console.log(s):m.info("No changes")}catch(t){m.error(` ${t.message}`)}return!0});u("status",async(n,e)=>{try{let t=new w(e.cwd);if(!await t.isRepo())return m.warn("Not a git repository"),!0;let s=await t.status();we(s)}catch(t){m.error(` ${t.message}`)}return!0});var Y=class{rl=null;session;options;running=!1;constructor(e){if(this.options=e,e.sessionId){let t=C(e.sessionId);t?this.session=t:(m.warn(`Session ${e.sessionId} not found, starting new session`),this.session=T(e.cwd))}else if(e.resume){let t=K();t?(this.session=t,m.info(`Resumed session: ${t.id}`)):(m.info("No previous session found, starting new session"),this.session=T(e.cwd))}else this.session=T(e.cwd)}async start(){this.running=!0,fe(this.options.version,this.session.id),this.session.messages.length>0&&(console.log(v.dim(` Resumed with ${this.session.messages.length} messages, ${this.session.tokensUsed.toLocaleString()} tokens`)),console.log()),this.rl=qt({input:process.stdin,output:process.stdout,prompt:v.cyan("agentx > "),terminal:!0}),this.rl.prompt(),this.rl.on("line",async e=>{let t=e.trim();if(!t){this.rl?.prompt();return}try{if(q(t)){if(!await this.handleCommand(t)){this.stop();return}}else await this.handleGeneration(t)}catch(s){m.error(` Error: ${s.message}`)}this.running&&this.rl?.prompt()}),this.rl.on("close",()=>{this.stop()}),this.rl.on("SIGINT",()=>{console.log(),this.stop()})}stop(){this.running=!1,R(this.session),console.log(),console.log(v.dim(` Session saved: ${this.session.id}`)),G(this.session.tokensUsed),console.log(),this.rl?.close(),process.exit(0)}async handleCommand(e){let{name:t,args:s}=V(e),i=W(t);if(!i)return m.warn(` Unknown command: /${t}. Type /help for available commands.`),!0;let o={session:this.session,cwd:this.options.cwd,onSessionChange:a=>{this.session=a}};return i(s,o)}async handleGeneration(e){let t=Vt({text:"Thinking...",color:"cyan"}).start();try{let s=this.session.messages.filter(r=>r.role!=="system").map(r=>({role:r.role,content:r.content})),i={task:e,cwd:this.options.cwd,provider:this.options.provider||"claude-code",model:this.options.model,apiKey:this.options.apiKey,overwrite:!0,dryRun:!1,interactive:!1,context7:!0,sessionMessages:s},o,a=!1;for await(let r of I(i)){if(r.type==="context_ready"){t.stop(),console.log(),a=!0;continue}if(r.type==="text_delta"){ye(r.text);continue}if(r.type==="done"){console.log();continue}if(r.type==="error")throw new Error(r.error);if(r.type==="step_complete"){r.step>1&&console.log(v.dim(` Step ${r.step}: ${r.filesCount} file(s)`));continue}r.type==="generate_result"&&(o=r.result)}if(a||t.stop(),!o)return;(o.files.written.length||o.files.skipped.length||o.files.errors.length)&&(P.getMode()==="plan"?ve(o.files.written.map(r=>({path:r,action:"create"}))):he(o.files)),o.tokensUsed&&G(o.tokensUsed),this.session.messages.push({role:"user",content:e}),this.session.messages.push({role:"assistant",content:o.content||""}),this.session.tokensUsed+=o.tokensUsed||0,this.session.filesGenerated.push(...o.files.written),o.followUp&&(console.log(),console.log(v.yellow(` ${o.followUp}`))),o.healResult&&(console.log(),o.healResult.healed?console.log(v.green(` Heal: passed verification${o.healResult.attempts>0?` (fixed in ${o.healResult.attempts} attempt(s))`:""}`)):o.healResult.error&&(console.log(v.red(` Heal: verification failed after ${o.healResult.attempts} attempt(s)`)),console.log(v.dim(` ${o.healResult.error.split(`
55
- `)[0]}`))))}catch(s){throw t.stop(),s}}};import{createServer as Yt}from"http";var y={TASK_NOT_FOUND:{code:-32001,message:"Task not found"},TASK_NOT_CANCELABLE:{code:-32002,message:"Task cannot be canceled"},INVALID_PARAMS:{code:-32602,message:"Invalid params"},INTERNAL_ERROR:{code:-32603,message:"Internal error"},METHOD_NOT_FOUND:{code:-32601,message:"Method not found"},PARSE_ERROR:{code:-32700,message:"Parse error"}};var zt={port:3171,host:"0.0.0.0",provider:"claude-code",cwd:process.cwd(),cors:!0},z=class{config;tasks=new Map;activeCancellations=new Set;log;constructor(e){this.config={...zt,...e},this.log=console.error.bind(console,"[a2a]")}async start(){Yt(async(t,s)=>{if(this.config.cors&&(s.setHeader("Access-Control-Allow-Origin","*"),s.setHeader("Access-Control-Allow-Methods","GET, POST, OPTIONS"),s.setHeader("Access-Control-Allow-Headers","Content-Type, Authorization"),t.method==="OPTIONS")){s.writeHead(204),s.end();return}await this.handleRequest(t,s)}).listen(this.config.port,this.config.host,()=>{this.log(`
56
- agentx A2A server v0.1.0`),this.log(` Listening on http://${this.config.host}:${this.config.port}`),this.log(` Provider: ${this.config.provider}`),this.log(` Working dir: ${this.config.cwd}`),this.log(""),this.log(" Discovery:"),this.log(" GET /.well-known/agent-card.json"),this.log(""),this.log(" JSON-RPC 2.0 methods:"),this.log(" tasks/send \u2014 synchronous task execution"),this.log(" tasks/sendSubscribe \u2014 streaming task execution (SSE)"),this.log(" tasks/get \u2014 retrieve task state"),this.log(" tasks/cancel \u2014 cancel running task"),this.log("")})}getAgentCard(){return{name:"agentx",description:"AI-powered agentic code generation agent. Generates components, pages, APIs, documents, skills, and more for any tech stack.",url:`http://${this.config.host}:${this.config.port}`,version:"0.1.0",capabilities:{streaming:!0,pushNotifications:!1,stateTransitionHistory:!0},skills:[{id:"generate",name:"Code Generation",description:"Generate code files from natural language descriptions. Supports components, pages, APIs, tests, schemas, and more.",tags:["code-generation","ai","multi-framework"],examples:["Create a React login form with email and password validation","Generate a REST API for user management with CRUD operations","Build a dashboard page with charts and data tables"]},{id:"evolve",name:"Code Transformation",description:"Transform existing code files based on natural language instructions. Applies targeted edits with diff preview.",tags:["code-transformation","refactoring","ai"],examples:["Add dark mode support to this component","Refactor this API to use async/await instead of callbacks"]},{id:"inspect",name:"Project Analysis",description:"Analyze a project's tech stack, schemas, dependencies, and structure.",tags:["analysis","project-inspection"],examples:["What tech stack does this project use?","List all API schemas in the project"]}],defaultInputModes:["text"],defaultOutputModes:["text","file"]}}async handleRequest(e,t){let s=new URL(e.url||"/",`http://${e.headers.host||"localhost"}`),i=e.method||"GET",o=s.pathname;this.log(`${i} ${o}`);try{if(i==="GET"&&o==="/.well-known/agent-card.json"){this.sendJson(t,200,this.getAgentCard());return}if(i==="POST"&&o==="/"){let a=await Xt(e);await this.handleJsonRpc(a,t);return}this.sendJson(t,404,{error:"Not found",hint:"Use GET /.well-known/agent-card.json for discovery or POST / for JSON-RPC"})}catch(a){this.log("Error:",a.message),this.sendJson(t,500,{error:a.message})}}async handleJsonRpc(e,t){if(e.jsonrpc!=="2.0"||!e.method||!e.id){this.sendJsonRpc(t,{jsonrpc:"2.0",id:e.id||0,error:y.PARSE_ERROR});return}let s=e,i=s.params||{};switch(s.method){case"tasks/send":await this.handleTaskSend(s.id,i,t);break;case"tasks/sendSubscribe":await this.handleTaskSendSubscribe(s.id,i,t);break;case"tasks/get":this.handleTaskGet(s.id,i,t);break;case"tasks/cancel":this.handleTaskCancel(s.id,i,t);break;default:this.sendJsonRpc(t,{jsonrpc:"2.0",id:s.id,error:y.METHOD_NOT_FOUND})}}async handleTaskSend(e,t,s){let i=String(t.id||`task-${Date.now().toString(36)}`),o=t.message;if(!o?.parts?.length){this.sendJsonRpc(s,{jsonrpc:"2.0",id:e,error:{...y.INVALID_PARAMS,data:"message with parts is required"}});return}let r=o.parts.filter(c=>c.type==="text").map(c=>c.text).join(`
54
+ `),s=[];for(let i of t)if(i.startsWith("diff --git")){let o=i.match(/b\/(.+)$/);o&&s.push(o[1])}return s.length===0?"chore: update files":s.length===1?`chore: update ${s[0]}`:`chore: update ${s.length} files`}};import{createInterface as Zt}from"readline";import v from"chalk";import es from"ora";import{existsSync as ue,mkdirSync as Wt,readFileSync as ie,readdirSync as he,writeFileSync as qt}from"fs";import O from"path";import Yt from"os";var S=O.join(Yt.homedir(),".agentx","sessions");function re(){ue(S)||Wt(S,{recursive:!0})}function T(n){return{id:Vt(),createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),cwd:n,messages:[],tokensUsed:0,filesGenerated:[]}}function R(n){re();let e=O.join(S,`${n.id}.json`);n.updatedAt=new Date().toISOString(),qt(e,JSON.stringify(n,null,2),"utf8")}function C(n){let e=O.join(S,`${n}.json`);if(!ue(e))return null;try{return JSON.parse(ie(e,"utf8"))}catch{return null}}function B(){re();let n=he(S).filter(t=>t.endsWith(".json")).map(t=>({name:t,path:O.join(S,t)}));if(!n.length)return null;let e=null;for(let t of n)try{let s=JSON.parse(ie(t.path,"utf8"));(!e||s.updatedAt>e.session.updatedAt)&&(e={name:t.name,session:s})}catch{}return e?.session??null}function W(){re();let n=he(S).filter(t=>t.endsWith(".json")),e=[];for(let t of n)try{let s=JSON.parse(ie(O.join(S,t),"utf8"));e.push(s)}catch{}return e.sort((t,s)=>s.updatedAt.localeCompare(t.updatedAt)),e}function Vt(){return Math.random().toString(36).slice(2,10)+Date.now().toString(36).slice(-4)}import p from"chalk";import{writeFileSync as zt}from"fs";import Xt from"path";import d from"chalk";function ye(n,e){console.log(),console.log(d.bold.cyan(" agentx")+d.dim(` v${n}`)),console.log(d.dim(` Session: ${e}`)),console.log(d.dim(" Type /help for commands, /quit to exit")),console.log()}function ke(n){if(n.written.length){console.log(),console.log(d.green(` Created ${n.written.length} file(s):`));for(let e of n.written)console.log(` ${d.green("+")} ${e}`)}if(n.skipped.length){console.log(),console.log(d.yellow(` Skipped ${n.skipped.length} file(s):`));for(let e of n.skipped)console.log(` ${d.yellow("~")} ${e}`)}if(n.errors.length){console.log(),console.log(d.red(` Failed ${n.errors.length} file(s):`));for(let e of n.errors)console.log(` ${d.red("x")} ${e}`)}}function G(n){let e=n/1e6*9;console.log(),console.log(d.dim(` Tokens: ${n.toLocaleString()} | Est. cost: $${e.toFixed(4)}`))}function we(n){process.stdout.write(n)}function Se(){console.log(),console.log(d.bold(" Commands:")),console.log(),console.log(` ${d.cyan("/help")} Show this help`),console.log(` ${d.cyan("/clear")} Clear conversation history`),console.log(` ${d.cyan("/save")} Save current session`),console.log(` ${d.cyan("/load")} Load a saved session`),console.log(` ${d.cyan("/undo")} Undo last generation`),console.log(` ${d.cyan("/cost")} Show token usage and cost breakdown`),console.log(` ${d.cyan("/export")} Export session as markdown`),console.log(` ${d.cyan("/files")} List generated files`),console.log(` ${d.cyan("/context")} Show session context info`),console.log(` ${d.cyan("/memory")} Show memory stats and preferences`),console.log(` ${d.cyan("/mode")} Switch permission mode`),console.log(` ${d.cyan("/commit")} Commit generated files with AI message`),console.log(` ${d.cyan("/diff")} Show git diff`),console.log(` ${d.cyan("/status")} Show git status`),console.log(` ${d.cyan("/quit")} Exit the REPL`),console.log()}function ve(n){if(console.log(),console.log(d.dim(` Branch: ${n.branch}`)),n.isClean){console.log(d.green(" Working tree clean"));return}n.staged.length&&console.log(d.green(` Staged: ${n.staged.length}`)),n.modified.length&&console.log(d.yellow(` Modified: ${n.modified.length}`)),n.untracked.length&&console.log(d.dim(` Untracked: ${n.untracked.length}`)),console.log()}function xe(n){if(console.log(),console.log(d.bold(" Cost Breakdown")),console.log(),console.log(d.dim(` Total: ${n.totalTokens.toLocaleString()} tokens ($${n.totalCost.toFixed(4)})`)),console.log(d.dim(` Input: ${n.totalInputTokens.toLocaleString()} | Output: ${n.totalOutputTokens.toLocaleString()}`)),Object.keys(n.models).length){console.log(),console.log(d.dim(" Per model:"));for(let[e,t]of Object.entries(n.models))console.log(` ${d.cyan(e)}: ${(t.inputTokens+t.outputTokens).toLocaleString()} tokens, $${t.cost.toFixed(4)} (${t.steps} step${t.steps!==1?"s":""})`)}if(n.steps.length>1){console.log(),console.log(d.dim(" Per step:"));for(let e of n.steps)console.log(` Step ${e.step}: ${(e.inputTokens+e.outputTokens).toLocaleString()} tokens ($${e.cost.toFixed(4)})`)}console.log()}function Ce(n){console.log(),console.log(d.bold(" Plan Preview")),console.log(d.dim(" No files will be written in plan mode.")),console.log();for(let e of n){let t=e.action==="create"?d.green("+"):d.yellow("~");console.log(` ${t} ${e.path} (${e.action})`)}console.log()}Q();N();import Qt from"prompts";var Pe={};function f(n,e){Pe[n]=e}function q(n){return Pe[n]}function Y(n){return n.startsWith("/")}function V(n){let e=n.trim(),t=e.indexOf(" ");return t===-1?{name:e.slice(1),args:""}:{name:e.slice(1,t),args:e.slice(t+1).trim()}}f("help",async()=>(Se(),!0));f("quit",async()=>!1);f("exit",async()=>!1);f("q",async()=>!1);f("clear",async(n,e)=>(e.session.messages=[],console.log(p.dim(" Conversation cleared")),!0));f("save",async(n,e)=>(R(e.session),console.log(p.dim(` Session saved: ${e.session.id}`)),!0));f("load",async(n,e)=>{let t=null;if(n){if(t=C(n),!t)return m.warn(`Session not found: ${n}`),!0}else{let s=W();if(!s.length)return m.info("No saved sessions"),!0;let{sessionId:i}=await Qt({type:"select",name:"sessionId",message:"Select a session",choices:s.slice(0,10).map(o=>({title:`${o.id} \u2014 ${new Date(o.updatedAt).toLocaleDateString()} (${o.messages.length} messages)`,value:o.id}))});if(!i)return!0;t=C(i)}return t&&(e.onSessionChange(t),console.log(p.dim(` Loaded session: ${t.id} (${t.messages.length} messages)`))),!0});f("undo",async(n,e)=>{let t=e.session.messages;return t.length<2?(m.info("Nothing to undo"),!0):(t[t.length-1]?.role==="assistant"&&t.pop(),t[t.length-1]?.role==="user"&&t.pop(),console.log(p.dim(" Undid last exchange")),!0)});f("cost",async(n,e)=>{let t=j.getSummary();return t.steps.length>0?xe(t):G(e.session.tokensUsed),!0});f("export",async(n,e)=>{let t=j.getSummary(),s=ee(e.session,t.steps.length?t:void 0),i=n||`session-${e.session.id}.md`,o=Xt.resolve(e.cwd,i);return zt(o,s,"utf8"),m.success(` Session exported to ${o}`),!0});f("files",async(n,e)=>{let t=e.session.filesGenerated;if(!t.length)return m.info("No files generated in this session"),!0;console.log(),console.log(p.dim(` Files generated (${t.length}):`));for(let s of t)console.log(` ${p.green("+")} ${s}`);return console.log(),!0});f("context",async(n,e)=>(console.log(),console.log(p.dim(` Session: ${e.session.id}`)),console.log(p.dim(` CWD: ${e.session.cwd}`)),console.log(p.dim(` Messages: ${e.session.messages.length}`)),console.log(p.dim(` Tokens: ${e.session.tokensUsed.toLocaleString()}`)),console.log(p.dim(` Files: ${e.session.filesGenerated.length}`)),console.log(p.dim(` Created: ${new Date(e.session.createdAt).toLocaleString()}`)),console.log(),!0));f("memory",async(n,e)=>{try{let t=new te(e.cwd);await t.load();let s=t.getStats(),i=t.getPreferences(),o=t.getPatterns(),a=t.getRecentGenerations(5);if(console.log(),console.log(p.bold(" Memory")),console.log(),console.log(p.dim(" Project:")),console.log(p.dim(` Generations: ${s.project.totalGenerations}`)),console.log(p.dim(` Success rate: ${(s.project.successRate*100).toFixed(0)}%`)),console.log(p.dim(` Heals: ${s.project.totalHeals}`)),console.log(),console.log(p.dim(" Global:")),console.log(p.dim(` Generations: ${s.user.totalGenerations}`)),console.log(p.dim(` Success rate: ${(s.user.successRate*100).toFixed(0)}%`)),i.length){console.log(),console.log(p.dim(" Preferences:"));for(let r of i.slice(0,10))console.log(p.dim(` ${r.key}: ${r.value} (${(r.confidence*100).toFixed(0)}%)`))}if(o.length){console.log(),console.log(p.dim(" Patterns:"));for(let r of o.slice(0,5))console.log(p.dim(` ${r.description} (${r.frequency}x)`))}if(a.length){console.log(),console.log(p.dim(" Recent:"));for(let r of a){let l=r.success?p.green("ok"):p.red("fail");console.log(p.dim(` [${l}] ${r.task.slice(0,60)}`))}}console.log()}catch(t){m.error(` ${t.message}`)}return!0});f("mode",async(n,e)=>{if(n&&_.includes(n))P.setMode(n),m.success(` Permission mode: ${n}`);else if(n)m.warn(` Unknown mode: ${n}. Valid modes: ${_.join(", ")}`);else{let t=P.getMode();console.log(),console.log(p.dim(` Current mode: ${p.bold(t)}`)),console.log(),console.log(p.dim(" Available modes:")),console.log(p.dim(" default \u2014 confirm each file write")),console.log(p.dim(" acceptEdits \u2014 auto-allow writes, confirm destructive ops")),console.log(p.dim(" plan \u2014 show plan without writing")),console.log(p.dim(" yolo \u2014 auto-allow everything")),console.log(),console.log(p.dim(" Usage: /mode <mode>")),console.log()}return!0});f("commit",async(n,e)=>{try{let t=new w(e.cwd);if(!await t.isRepo())return m.warn("Not a git repository"),!0;let s=e.session.filesGenerated.filter(r=>r);if(s.length&&(await t.add(s),console.log(p.dim(` Staged ${s.length} generated file(s)`))),(await t.status()).staged.length===0)return m.warn("Nothing staged to commit"),!0;let o;try{let r=A();o=await t.generateCommitMessage(r)}catch{o=await t.generateCommitMessage()}console.log(p.dim(` Message: ${o}`));let a=await t.commit(o);m.success(` [${a.hash}] ${a.message}`)}catch(t){m.error(` ${t.message}`)}return!0});f("diff",async(n,e)=>{try{let s=await new w(e.cwd).diff();s.trim()?console.log(s):m.info("No changes")}catch(t){m.error(` ${t.message}`)}return!0});f("status",async(n,e)=>{try{let t=new w(e.cwd);if(!await t.isRepo())return m.warn("Not a git repository"),!0;let s=await t.status();ve(s)}catch(t){m.error(` ${t.message}`)}return!0});N();var z=class{rl=null;session;options;running=!1;constructor(e){if(this.options=e,e.sessionId){let t=C(e.sessionId);t?this.session=t:(m.warn(`Session ${e.sessionId} not found, starting new session`),this.session=T(e.cwd))}else if(e.resume){let t=B();t?(this.session=t,m.info(`Resumed session: ${t.id}`)):(m.info("No previous session found, starting new session"),this.session=T(e.cwd))}else this.session=T(e.cwd)}async start(){this.running=!0,ye(this.options.version,this.session.id),this.session.messages.length>0&&(console.log(v.dim(` Resumed with ${this.session.messages.length} messages, ${this.session.tokensUsed.toLocaleString()} tokens`)),console.log()),this.rl=Zt({input:process.stdin,output:process.stdout,prompt:v.cyan("agentx > "),terminal:!0}),this.rl.prompt(),this.rl.on("line",async e=>{let t=e.trim();if(!t){this.rl?.prompt();return}try{if(Y(t)){if(!await this.handleCommand(t)){this.stop();return}}else await this.handleGeneration(t)}catch(s){m.error(` Error: ${s.message}`)}this.running&&this.rl?.prompt()}),this.rl.on("close",()=>{this.stop()}),this.rl.on("SIGINT",()=>{console.log(),this.stop()})}stop(){this.running=!1,R(this.session),console.log(),console.log(v.dim(` Session saved: ${this.session.id}`)),G(this.session.tokensUsed),console.log(),this.rl?.close(),process.exit(0)}async handleCommand(e){let{name:t,args:s}=V(e),i=q(t);if(!i)return m.warn(` Unknown command: /${t}. Type /help for available commands.`),!0;let o={session:this.session,cwd:this.options.cwd,onSessionChange:a=>{this.session=a}};return i(s,o)}async handleGeneration(e){let t=es({text:"Thinking...",color:"cyan"}).start();try{let s=this.session.messages.filter(r=>r.role!=="system").map(r=>({role:r.role,content:r.content})),i={task:e,cwd:this.options.cwd,provider:this.options.provider||"claude-code",model:this.options.model,apiKey:this.options.apiKey,overwrite:!0,dryRun:!1,interactive:!1,context7:!0,sessionMessages:s},o,a=!1;for await(let r of I(i)){if(r.type==="context_ready"){t.stop(),console.log(),a=!0;continue}if(r.type==="text_delta"){we(r.text);continue}if(r.type==="done"){console.log();continue}if(r.type==="error")throw new Error(r.error);if(r.type==="step_complete"){r.step>1&&console.log(v.dim(` Step ${r.step}: ${r.filesCount} file(s)`));continue}r.type==="generate_result"&&(o=r.result)}if(a||t.stop(),!o)return;(o.files.written.length||o.files.skipped.length||o.files.errors.length)&&(P.getMode()==="plan"?Ce(o.files.written.map(r=>({path:r,action:"create"}))):ke(o.files)),o.tokensUsed&&G(o.tokensUsed),this.session.messages.push({role:"user",content:e}),this.session.messages.push({role:"assistant",content:o.content||""}),this.session.tokensUsed+=o.tokensUsed||0,this.session.filesGenerated.push(...o.files.written),o.followUp&&(console.log(),console.log(v.yellow(` ${o.followUp}`))),o.healResult&&(console.log(),o.healResult.healed?console.log(v.green(` Heal: passed verification${o.healResult.attempts>0?` (fixed in ${o.healResult.attempts} attempt(s))`:""}`)):o.healResult.error&&(console.log(v.red(` Heal: verification failed after ${o.healResult.attempts} attempt(s)`)),console.log(v.dim(` ${o.healResult.error.split(`
55
+ `)[0]}`))))}catch(s){throw t.stop(),s}}};import{createServer as ts}from"http";var y={TASK_NOT_FOUND:{code:-32001,message:"Task not found"},TASK_NOT_CANCELABLE:{code:-32002,message:"Task cannot be canceled"},INVALID_PARAMS:{code:-32602,message:"Invalid params"},INTERNAL_ERROR:{code:-32603,message:"Internal error"},METHOD_NOT_FOUND:{code:-32601,message:"Method not found"},PARSE_ERROR:{code:-32700,message:"Parse error"}};var ss={port:3171,host:"0.0.0.0",provider:"claude-code",cwd:process.cwd(),cors:!0},X=class{config;tasks=new Map;activeCancellations=new Set;log;constructor(e){this.config={...ss,...e},this.log=console.error.bind(console,"[a2a]")}async start(){ts(async(t,s)=>{if(this.config.cors&&(s.setHeader("Access-Control-Allow-Origin","*"),s.setHeader("Access-Control-Allow-Methods","GET, POST, OPTIONS"),s.setHeader("Access-Control-Allow-Headers","Content-Type, Authorization"),t.method==="OPTIONS")){s.writeHead(204),s.end();return}await this.handleRequest(t,s)}).listen(this.config.port,this.config.host,()=>{this.log(`
56
+ agentx A2A server v0.1.0`),this.log(` Listening on http://${this.config.host}:${this.config.port}`),this.log(` Provider: ${this.config.provider}`),this.log(` Working dir: ${this.config.cwd}`),this.log(""),this.log(" Discovery:"),this.log(" GET /.well-known/agent-card.json"),this.log(""),this.log(" JSON-RPC 2.0 methods:"),this.log(" tasks/send \u2014 synchronous task execution"),this.log(" tasks/sendSubscribe \u2014 streaming task execution (SSE)"),this.log(" tasks/get \u2014 retrieve task state"),this.log(" tasks/cancel \u2014 cancel running task"),this.log("")})}getAgentCard(){return{name:"agentx",description:"AI-powered agentic code generation agent. Generates components, pages, APIs, documents, skills, and more for any tech stack.",url:`http://${this.config.host}:${this.config.port}`,version:"0.1.0",capabilities:{streaming:!0,pushNotifications:!1,stateTransitionHistory:!0},skills:[{id:"generate",name:"Code Generation",description:"Generate code files from natural language descriptions. Supports components, pages, APIs, tests, schemas, and more.",tags:["code-generation","ai","multi-framework"],examples:["Create a React login form with email and password validation","Generate a REST API for user management with CRUD operations","Build a dashboard page with charts and data tables"]},{id:"evolve",name:"Code Transformation",description:"Transform existing code files based on natural language instructions. Applies targeted edits with diff preview.",tags:["code-transformation","refactoring","ai"],examples:["Add dark mode support to this component","Refactor this API to use async/await instead of callbacks"]},{id:"inspect",name:"Project Analysis",description:"Analyze a project's tech stack, schemas, dependencies, and structure.",tags:["analysis","project-inspection"],examples:["What tech stack does this project use?","List all API schemas in the project"]}],defaultInputModes:["text"],defaultOutputModes:["text","file"]}}async handleRequest(e,t){let s=new URL(e.url||"/",`http://${e.headers.host||"localhost"}`),i=e.method||"GET",o=s.pathname;this.log(`${i} ${o}`);try{if(i==="GET"&&o==="/.well-known/agent-card.json"){this.sendJson(t,200,this.getAgentCard());return}if(i==="POST"&&o==="/"){let a=await os(e);await this.handleJsonRpc(a,t);return}this.sendJson(t,404,{error:"Not found",hint:"Use GET /.well-known/agent-card.json for discovery or POST / for JSON-RPC"})}catch(a){this.log("Error:",a.message),this.sendJson(t,500,{error:a.message})}}async handleJsonRpc(e,t){if(e.jsonrpc!=="2.0"||!e.method||!e.id){this.sendJsonRpc(t,{jsonrpc:"2.0",id:e.id||0,error:y.PARSE_ERROR});return}let s=e,i=s.params||{};switch(s.method){case"tasks/send":await this.handleTaskSend(s.id,i,t);break;case"tasks/sendSubscribe":await this.handleTaskSendSubscribe(s.id,i,t);break;case"tasks/get":this.handleTaskGet(s.id,i,t);break;case"tasks/cancel":this.handleTaskCancel(s.id,i,t);break;default:this.sendJsonRpc(t,{jsonrpc:"2.0",id:s.id,error:y.METHOD_NOT_FOUND})}}async handleTaskSend(e,t,s){let i=String(t.id||`task-${Date.now().toString(36)}`),o=t.message;if(!o?.parts?.length){this.sendJsonRpc(s,{jsonrpc:"2.0",id:e,error:{...y.INVALID_PARAMS,data:"message with parts is required"}});return}let r=o.parts.filter(c=>c.type==="text").map(c=>c.text).join(`
57
57
  `);if(!r){this.sendJsonRpc(s,{jsonrpc:"2.0",id:e,error:{...y.INVALID_PARAMS,data:"No text content in message parts"}});return}let l={id:i,state:"submitted",messages:[{role:"user",parts:o.parts}],artifacts:[],metadata:t.metadata,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()};this.tasks.set(i,l),l.state="working",l.updatedAt=new Date().toISOString();try{let c=await E({task:r,cwd:this.config.cwd,provider:this.config.provider,model:this.config.model,apiKey:this.config.apiKey,overwrite:!0,interactive:!1,context7:!0}),g=c.files.written.map((k,D)=>({name:k,description:"Generated file",parts:[{type:"text",text:k}],index:D})),h={role:"agent",parts:[{type:"text",text:c.content||"Generation complete."}]};c.followUp?(l.state="input-required",h.parts.push({type:"text",text:`
58
58
 
59
59
  Question: ${c.followUp}`})):l.state="completed",l.messages.push(h),l.artifacts=g,l.updatedAt=new Date().toISOString()}catch(c){l.state="failed",l.messages.push({role:"agent",parts:[{type:"text",text:`Error: ${c.message}`}]}),l.updatedAt=new Date().toISOString()}this.sendJsonRpc(s,{jsonrpc:"2.0",id:e,result:l})}async handleTaskSendSubscribe(e,t,s){let i=String(t.id||`task-${Date.now().toString(36)}`),o=t.message;if(!o?.parts?.length){this.sendJsonRpc(s,{jsonrpc:"2.0",id:e,error:{...y.INVALID_PARAMS,data:"message with parts is required"}});return}let r=o.parts.filter(g=>g.type==="text").map(g=>g.text).join(`
60
60
  `);if(!r){this.sendJsonRpc(s,{jsonrpc:"2.0",id:e,error:{...y.INVALID_PARAMS,data:"No text content in message parts"}});return}s.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"});let l={id:i,state:"submitted",messages:[{role:"user",parts:o.parts}],artifacts:[],metadata:t.metadata,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()};this.tasks.set(i,l);let c=g=>{s.write(`data: ${JSON.stringify(g)}
61
61
 
62
- `)};c({id:i,state:"submitted",final:!1}),l.state="working",l.updatedAt=new Date().toISOString(),c({id:i,state:"working",final:!1});try{let g="",h=[];for await(let k of I({task:r,cwd:this.config.cwd,provider:this.config.provider,model:this.config.model,apiKey:this.config.apiKey,overwrite:!0,interactive:!1,context7:!0})){if(this.activeCancellations.has(i)){this.activeCancellations.delete(i),l.state="canceled",l.updatedAt=new Date().toISOString(),c({id:i,state:"canceled",final:!0}),s.end();return}if(k.type==="text_delta"&&(g+=k.text,c({id:i,state:"working",message:{role:"agent",parts:[{type:"text",text:k.text}]},final:!1})),k.type==="generate_result"){let D=k.result,ie=D.files.written.map((L,Pe)=>({name:L,parts:[{type:"text",text:L}],index:Pe}));h.push(...ie);for(let L of ie)c({id:i,state:"working",artifact:L,final:!1});D.followUp?l.state="input-required":l.state="completed"}}l.messages.push({role:"agent",parts:[{type:"text",text:g||"Generation complete."}]}),l.artifacts=h,l.updatedAt=new Date().toISOString(),c({id:i,state:l.state,final:!0})}catch(g){l.state="failed",l.messages.push({role:"agent",parts:[{type:"text",text:`Error: ${g.message}`}]}),l.updatedAt=new Date().toISOString(),c({id:i,state:"failed",message:{role:"agent",parts:[{type:"text",text:`Error: ${g.message}`}]},final:!0})}s.end()}handleTaskGet(e,t,s){let i=String(t.id||""),o=this.tasks.get(i);if(!o){this.sendJsonRpc(s,{jsonrpc:"2.0",id:e,error:y.TASK_NOT_FOUND});return}this.sendJsonRpc(s,{jsonrpc:"2.0",id:e,result:o})}handleTaskCancel(e,t,s){let i=String(t.id||""),o=this.tasks.get(i);if(!o){this.sendJsonRpc(s,{jsonrpc:"2.0",id:e,error:y.TASK_NOT_FOUND});return}if(o.state!=="working"&&o.state!=="submitted"){this.sendJsonRpc(s,{jsonrpc:"2.0",id:e,error:y.TASK_NOT_CANCELABLE});return}this.activeCancellations.add(i),o.state="canceled",o.updatedAt=new Date().toISOString(),this.sendJsonRpc(s,{jsonrpc:"2.0",id:e,result:o})}sendJson(e,t,s){e.writeHead(t,{"Content-Type":"application/json"}),e.end(JSON.stringify(s,null,2))}sendJsonRpc(e,t){e.headersSent||e.writeHead(200,{"Content-Type":"application/json"}),e.end(JSON.stringify(t))}};async function Xt(n){return new Promise((e,t)=>{let s="";n.on("data",i=>s+=i),n.on("end",()=>{try{e(s?JSON.parse(s):{})}catch{e({})}}),n.on("error",t)})}var Ce={"claude-code":{streaming:!0,tools:!0,vision:!0,thinking:!0,maxContext:1e6},claude:{streaming:!0,tools:!0,vision:!0,thinking:!0,maxContext:1e6},openai:{streaming:!0,tools:!0,vision:!0,thinking:!1,maxContext:128e3},ollama:{streaming:!0,tools:!1,vision:!1,thinking:!1,maxContext:32e3}};function Qt(n,e){let t=Ce[n];if(!t)return[`Unknown provider "${n}" \u2014 capabilities unknown`];if(!e?.length)return[];let s=[],i=[];for(let o of e)o in t&&!t[o]&&i.push(o);return i.length&&s.push(`Provider "${n}" lacks: ${i.join(", ")}. Some features will be degraded.`),s}export{re as A2AClient,ae as A2AMesh,z as A2AServer,Le as ALL_TOOL_NAMES,St as AgentRegistry,$t as AgentXDaemon,J as AgentXRuntime,Ve as BLOCKING_EVENTS,Fe as ClaudeCodeProvider,Ne as ClaudeProvider,at as ContextBuilder,wt as CronScheduler,b as EnhanceEngine,w as GitManager,ut as GraphStore,qe as HOOK_EVENTS,U as HealEngine,Ze as HookRegistry,_ as Memory,Z as MemoryHierarchy,Ct as MessageRouter,Be as OUTPUT_CONFIGS,$e as OUTPUT_TYPES,j as PERMISSION_MODES,Ce as PROVIDER_CAPABILITIES,nt as PermissionManager,$ as Pipeline,Y as ReplEngine,mt as STARTER_SCHEMA,Pt as TelegramAdapter,vt as ToolExecutor,Ye as UsageTracker,bt as WhatsAppAdapter,ft as WikiStore,be as agentConfigSchema,Qt as checkCapabilities,H as createAgentContext,A as createProvider,T as createSession,ht as daemonConfigSchema,Qe as debug,je as detectSchemas,X as detectTechStack,Ie as ensureCredentials,lt as executeClaudeCode,ct as executeOpenCodeCli,pt as executeOrchestrator,dt as executeSdk,gt as executeTask,Q as exportSession,_e as formatSchemas,M as formatTechStack,De as formatToolsForSystemPrompt,Ue as gatherContext7Docs,E as generate,Gt as generateSkill,It as generateSkillMd,I as generateStream,Oe as getAnthropicTools,W as getCommand,Ge as getLegacyTools,Rt as getPackageInfo,tt as globalHooks,P as globalPermissions,F as globalTracker,Tt as handleError,Mt as installSkillPackage,q as isCommand,Xe as isDebug,Ot as listInstalledSkills,B as listSessions,Re as loadAuthConfig,yt as loadDaemonConfig,et as loadHooks,K as loadLatestSession,He as loadLocalSkills,rt as loadProjectInstructions,C as loadSession,m as logger,Ke as matchSkillsToTask,Te as outputTypeDescriptions,V as parseCommand,N as parseSkillContent,Je as parseSkillFile,ot as permissionConfigSchema,st as permissionModeSchema,u as registerCommand,it as resolveAtImports,We as resolveOutputType,Me as resolveToken,Ee as runModelSetup,Ae as saveAuthConfig,R as saveSession,ze as setDebug,xt as startMcpServer,kt as validateWorkspaces};
62
+ `)};c({id:i,state:"submitted",final:!1}),l.state="working",l.updatedAt=new Date().toISOString(),c({id:i,state:"working",final:!1});try{let g="",h=[];for await(let k of I({task:r,cwd:this.config.cwd,provider:this.config.provider,model:this.config.model,apiKey:this.config.apiKey,overwrite:!0,interactive:!1,context7:!0})){if(this.activeCancellations.has(i)){this.activeCancellations.delete(i),l.state="canceled",l.updatedAt=new Date().toISOString(),c({id:i,state:"canceled",final:!0}),s.end();return}if(k.type==="text_delta"&&(g+=k.text,c({id:i,state:"working",message:{role:"agent",parts:[{type:"text",text:k.text}]},final:!1})),k.type==="generate_result"){let D=k.result,ae=D.files.written.map((L,$e)=>({name:L,parts:[{type:"text",text:L}],index:$e}));h.push(...ae);for(let L of ae)c({id:i,state:"working",artifact:L,final:!1});D.followUp?l.state="input-required":l.state="completed"}}l.messages.push({role:"agent",parts:[{type:"text",text:g||"Generation complete."}]}),l.artifacts=h,l.updatedAt=new Date().toISOString(),c({id:i,state:l.state,final:!0})}catch(g){l.state="failed",l.messages.push({role:"agent",parts:[{type:"text",text:`Error: ${g.message}`}]}),l.updatedAt=new Date().toISOString(),c({id:i,state:"failed",message:{role:"agent",parts:[{type:"text",text:`Error: ${g.message}`}]},final:!0})}s.end()}handleTaskGet(e,t,s){let i=String(t.id||""),o=this.tasks.get(i);if(!o){this.sendJsonRpc(s,{jsonrpc:"2.0",id:e,error:y.TASK_NOT_FOUND});return}this.sendJsonRpc(s,{jsonrpc:"2.0",id:e,result:o})}handleTaskCancel(e,t,s){let i=String(t.id||""),o=this.tasks.get(i);if(!o){this.sendJsonRpc(s,{jsonrpc:"2.0",id:e,error:y.TASK_NOT_FOUND});return}if(o.state!=="working"&&o.state!=="submitted"){this.sendJsonRpc(s,{jsonrpc:"2.0",id:e,error:y.TASK_NOT_CANCELABLE});return}this.activeCancellations.add(i),o.state="canceled",o.updatedAt=new Date().toISOString(),this.sendJsonRpc(s,{jsonrpc:"2.0",id:e,result:o})}sendJson(e,t,s){e.writeHead(t,{"Content-Type":"application/json"}),e.end(JSON.stringify(s,null,2))}sendJsonRpc(e,t){e.headersSent||e.writeHead(200,{"Content-Type":"application/json"}),e.end(JSON.stringify(t))}};async function os(n){return new Promise((e,t)=>{let s="";n.on("data",i=>s+=i),n.on("end",()=>{try{e(s?JSON.parse(s):{})}catch{e({})}}),n.on("error",t)})}mt();ht();Ge();N();export{le as A2AClient,ce as A2AMesh,X as A2AServer,Fe as ALL_TOOL_NAMES,bt as AgentRegistry,It as AgentXDaemon,K as AgentXRuntime,ze as BLOCKING_EVENTS,_e as ClaudeCodeProvider,je as ClaudeProvider,ct as ContextBuilder,$t as CronScheduler,$ as EnhanceEngine,w as GitManager,Ct as GraphStore,Ve as HOOK_EVENTS,H as HealEngine,tt as HookRegistry,U as Memory,te as MemoryHierarchy,At as MessageRouter,qe as OUTPUT_CONFIGS,Te as OUTPUT_TYPES,_ as PERMISSION_MODES,ft as PROVIDER_CAPABILITIES,rt as PermissionManager,b as Pipeline,z as ReplEngine,xt as STARTER_SCHEMA,Mt as TelegramAdapter,Tt as ToolExecutor,Xe as UsageTracker,Et as WhatsAppAdapter,Pt as WikiStore,be as agentConfigSchema,ut as checkCapabilities,J as createAgentContext,A as createProvider,T as createSession,dt as daemonConfigSchema,et as debug,Ue as detectSchemas,Z as detectTechStack,Oe as ensureCredentials,yt as executeClaudeCode,kt as executeOpenCodeCli,St as executeOrchestrator,wt as executeSdk,vt as executeTask,ee as exportSession,He as formatSchemas,M as formatTechStack,Ne as formatToolsForSystemPrompt,Je as gatherContext7Docs,E as generate,_t as generateSkill,Ft as generateSkillMd,I as generateStream,De as getAnthropicTools,q as getCommand,Le as getLegacyTools,Gt as getPackageInfo,ot as globalHooks,P as globalPermissions,j as globalTracker,Ot as handleError,Lt as installSkillPackage,Y as isCommand,Ze as isDebug,jt as listInstalledSkills,W as listSessions,Ae as loadAuthConfig,pt as loadDaemonConfig,st as loadHooks,B as loadLatestSession,Ke as loadLocalSkills,lt as loadProjectInstructions,C as loadSession,m as logger,We as matchSkillsToTask,Re as outputTypeDescriptions,V as parseCommand,F as parseSkillContent,Be as parseSkillFile,it as permissionConfigSchema,nt as permissionModeSchema,f as registerCommand,at as resolveAtImports,Ye as resolveOutputType,Ee as resolveToken,Ie as runModelSetup,Me as saveAuthConfig,R as saveSession,Qe as setDebug,Rt as startMcpServer,gt as validateWorkspaces};
63
63
  //# sourceMappingURL=index.js.map