autohand-cli 0.8.2 → 0.9.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 (551) hide show
  1. package/README.md +173 -74
  2. package/dist/AgentRegistry-EGBDIUAK.cjs +10 -0
  3. package/dist/{AgentRegistry-7LDL5HJH.js → AgentRegistry-XPWSVO3Q.js} +3 -3
  4. package/dist/{AutomodeManager-MWLKGPZK.js → AutomodeManager-APLLPEYJ.js} +32 -18
  5. package/dist/{AutomodeManager-NYIZNODK.cjs → AutomodeManager-MPSXT2RH.cjs} +38 -24
  6. package/dist/CommunitySkillsCache-2OIUV227.cjs +8 -0
  7. package/dist/CommunitySkillsCache-ZEQWP6YM.js +8 -0
  8. package/dist/GitHubRegistryFetcher-CYJLF2XL.cjs +7 -0
  9. package/dist/{GitHubRegistryFetcher-6JQ5JEDZ.js → GitHubRegistryFetcher-J2BWPXJF.js} +2 -2
  10. package/dist/HookManager-CWLTFKWO.js +7 -0
  11. package/dist/HookManager-TMAJQU4S.cjs +7 -0
  12. package/dist/{ImportWizard-35YBJ4AM.cjs → ImportWizard-MQXEED2U.cjs} +41 -17
  13. package/dist/{ImportWizard-XH7CINCH.js → ImportWizard-QBKQEXDW.js} +35 -11
  14. package/dist/LearnAdvisor-46FG2XIP.js +9 -0
  15. package/dist/LearnAdvisor-XBRDNAGH.cjs +9 -0
  16. package/dist/McpClientManager-BNSKLHIN.cjs +8 -0
  17. package/dist/{McpClientManager-7RM6YT35.js → McpClientManager-SL35BR24.js} +2 -2
  18. package/dist/MemoryManager-34L4YOKA.cjs +8 -0
  19. package/dist/MemoryManager-WJMLPWGU.js +8 -0
  20. package/dist/NVIDIAProvider-2HR737UE.js +14 -0
  21. package/dist/NVIDIAProvider-MVTL62PR.cjs +14 -0
  22. package/dist/PermissionManager-5OOJ7FAT.cjs +11 -0
  23. package/dist/{PermissionManager-ATUV34LQ.js → PermissionManager-KMYILJ4Z.js} +4 -4
  24. package/dist/{ProjectProfiler-ZDWR2ODG.cjs → ProjectProfiler-CDAE7ECW.cjs} +2 -1
  25. package/dist/{ProjectProfiler-UMJJSOCE.js → ProjectProfiler-NZTJDRHD.js} +2 -1
  26. package/dist/ProviderFactory-C3YPXTDD.cjs +11 -0
  27. package/dist/ProviderFactory-HFPRVQ25.js +11 -0
  28. package/dist/SessionManager-PNBTJJTQ.js +10 -0
  29. package/dist/SessionManager-WAPTFMDO.cjs +10 -0
  30. package/dist/SkillsRegistry-4RRD5GMX.js +9 -0
  31. package/dist/SkillsRegistry-7AJP74GJ.cjs +9 -0
  32. package/dist/SubAgent-FDIH3DXB.js +11 -0
  33. package/dist/SubAgent-HVL2ICVZ.cjs +11 -0
  34. package/dist/{SyncApiClient-LVIO4C2S.js → SyncApiClient-LRPFNCKJ.js} +2 -2
  35. package/dist/SyncApiClient-VMBOLQ6H.cjs +11 -0
  36. package/dist/about-BW3PDZUU.js +14 -0
  37. package/dist/about-FCAX37YC.cjs +14 -0
  38. package/dist/acp-EOETGAHC.cjs +1517 -0
  39. package/dist/acp-VHEL7BOW.js +1517 -0
  40. package/dist/actionExecutor-33I47NZS.js +24 -0
  41. package/dist/actionExecutor-4YBMR3YH.cjs +24 -0
  42. package/dist/add-dir-7SS6KSH5.cjs +11 -0
  43. package/dist/add-dir-VFX7QT4E.js +11 -0
  44. package/dist/agent-DMRUFU4M.cjs +116 -0
  45. package/dist/agent-WCJEYQJT.js +116 -0
  46. package/dist/agents/builtin/code-cleaner.md +1 -1
  47. package/dist/agents/builtin/docs-writer.md +1 -1
  48. package/dist/agents/builtin/researcher.md +2 -2
  49. package/dist/agents/builtin/reviewer.md +1 -1
  50. package/dist/agents/builtin/tester.md +1 -1
  51. package/dist/agents/builtin/todo-resolver.md +1 -1
  52. package/dist/agents-CHROO3VU.cjs +17 -0
  53. package/dist/agents-UVDUL65K.js +17 -0
  54. package/dist/agents-new-AUBWSOXP.js +17 -0
  55. package/dist/agents-new-Y562WC47.cjs +17 -0
  56. package/dist/{autoSkill-6TGBTEQD.js → autoSkill-EFMK6WU6.js} +3 -3
  57. package/dist/autoSkill-YOLLFTP2.cjs +20 -0
  58. package/dist/automode-BMYSRM34.js +10 -0
  59. package/dist/automode-DBLKTTKD.cjs +10 -0
  60. package/dist/browserToolBridge-BXRQB4B4.cjs +58 -0
  61. package/dist/browserToolBridge-F5N66PE7.js +58 -0
  62. package/dist/{cc-7LEIJ3KF.js → cc-AYEP2CA3.js} +1 -1
  63. package/dist/{cc-Q5MM4AWC.cjs → cc-S2QLQFBR.cjs} +1 -1
  64. package/dist/chrome-ATC4OO5I.cjs +20 -0
  65. package/dist/chrome-NHJ44WUN.js +50 -0
  66. package/dist/chrome-O62WXV7F.js +20 -0
  67. package/dist/chrome-XHJLCO4M.cjs +50 -0
  68. package/dist/chromeSkill-53TH55PM.js +105 -0
  69. package/dist/chromeSkill-THW7N4IY.cjs +105 -0
  70. package/dist/{chunk-HOAHWIQ5.cjs → chunk-2CGE7ZV3.cjs} +26 -26
  71. package/dist/chunk-2H5O745H.js +63 -0
  72. package/dist/chunk-2HOLOHVK.js +2219 -0
  73. package/dist/{chunk-3PDTTAKJ.js → chunk-2QL6MNXG.js} +15 -8
  74. package/dist/{chunk-PGRH5Q77.cjs → chunk-2VHB43IX.cjs} +35 -6
  75. package/dist/{chunk-VG34MG2U.js → chunk-37M5UM6I.js} +9 -6
  76. package/dist/{chunk-6HYLHBQG.cjs → chunk-3DDL2E55.cjs} +20 -16
  77. package/dist/chunk-3EDDDZS2.cjs +5 -0
  78. package/dist/{chunk-6OYHF6MF.js → chunk-3GUEUCZK.js} +28 -4
  79. package/dist/{chunk-N254NRHT.cjs → chunk-3HT76LNN.cjs} +9 -2
  80. package/dist/{chunk-DVUHHH3B.cjs → chunk-3KLSNNRW.cjs} +4 -4
  81. package/dist/chunk-3LJJG5YY.cjs +387 -0
  82. package/dist/chunk-3OF56EMA.cjs +197 -0
  83. package/dist/chunk-3PXKRVCW.js +108 -0
  84. package/dist/{chunk-IKGWDOGU.cjs → chunk-3S563FNF.cjs} +160 -79
  85. package/dist/chunk-3UT7R3XV.js +663 -0
  86. package/dist/chunk-4256YRCO.cjs +80 -0
  87. package/dist/chunk-46C73ZKK.cjs +663 -0
  88. package/dist/chunk-46MTALKD.js +44 -0
  89. package/dist/{chunk-AEJH23FO.cjs → chunk-47PHDKNW.cjs} +6 -6
  90. package/dist/chunk-4LMUDS2K.js +124 -0
  91. package/dist/{chunk-HLHTG5ZU.cjs → chunk-5CMYEM3R.cjs} +14 -12
  92. package/dist/{chunk-MBBY4ZIK.js → chunk-5F6ZKSHO.js} +4 -1
  93. package/dist/chunk-5JFTY3VU.js +74 -0
  94. package/dist/chunk-5JTTM5SC.js +59 -0
  95. package/dist/{chunk-IETRBBMP.cjs → chunk-5K3CDSWZ.cjs} +108 -31
  96. package/dist/{chunk-GJH7XMSK.js → chunk-5VHP6HDQ.js} +8 -6
  97. package/dist/{chunk-6ZCULLCA.js → chunk-62RTC3XX.js} +1 -1
  98. package/dist/{chunk-MSED7RH2.cjs → chunk-6GUODJKM.cjs} +112 -41
  99. package/dist/{chunk-47CKWKEX.cjs → chunk-6HH236FV.cjs} +9 -4
  100. package/dist/{chunk-WHE2SWHU.js → chunk-6NVAK6CK.js} +2 -2
  101. package/dist/chunk-6R25D2H5.js +121 -0
  102. package/dist/{chunk-3PCTTUNW.cjs → chunk-6XVVIY54.cjs} +55 -25
  103. package/dist/{chunk-3L53OA4E.cjs → chunk-75EDROHL.cjs} +10 -10
  104. package/dist/{chunk-G4CAKI3V.js → chunk-7HPWMALN.js} +7 -2
  105. package/dist/chunk-7JLT2VNW.cjs +18963 -0
  106. package/dist/chunk-7LWQCE4Y.cjs +987 -0
  107. package/dist/{chunk-OLSBBZW6.cjs → chunk-7MU7LWF3.cjs} +5 -5
  108. package/dist/{chunk-HLQV64Y5.js → chunk-7RFJB75Y.js} +140 -59
  109. package/dist/{chunk-X2MSVKDV.js → chunk-A7HHCIDQ.js} +2 -2
  110. package/dist/{chunk-SKYG33B2.cjs → chunk-AC7DZ6SK.cjs} +3 -3
  111. package/dist/{chunk-XX2ZO7DS.js → chunk-ACDQGA4Z.js} +90 -16
  112. package/dist/{chunk-CZXGCVTR.cjs → chunk-AOKCI722.cjs} +2 -2
  113. package/dist/chunk-ARBEHFCG.js +715 -0
  114. package/dist/{chunk-OOKY3HPZ.js → chunk-AT7OWLY5.js} +50 -9
  115. package/dist/chunk-AU6JAGZJ.cjs +231 -0
  116. package/dist/chunk-AUFNACED.js +18963 -0
  117. package/dist/{chunk-CDBPBM2K.cjs → chunk-AUYSIEVV.cjs} +3 -3
  118. package/dist/chunk-B4HSNOIH.cjs +354 -0
  119. package/dist/{chunk-EGMZDTSL.js → chunk-B5CGDNMR.js} +10 -2
  120. package/dist/{chunk-34M3HWLR.js → chunk-BFQDQRDE.js} +2 -2
  121. package/dist/{chunk-2AA5MFES.js → chunk-BL2UC7HC.js} +8 -5
  122. package/dist/{chunk-LNMYK2F5.cjs → chunk-BQ22N3TX.cjs} +56 -41
  123. package/dist/chunk-BQU3HAE7.js +21 -0
  124. package/dist/chunk-BWF4VDYE.js +3897 -0
  125. package/dist/chunk-BYE7RQFZ.cjs +121 -0
  126. package/dist/{chunk-APIXPPMT.js → chunk-CBFH2J3O.js} +855 -33
  127. package/dist/chunk-CCVMREXI.js +420 -0
  128. package/dist/chunk-CFAWTLSC.js +13 -0
  129. package/dist/{chunk-G27PQQFD.js → chunk-CFFE4VA3.js} +1 -1
  130. package/dist/{chunk-ZYQMLKOK.cjs → chunk-CH2J4PVE.cjs} +212 -70
  131. package/dist/{chunk-7BTSG4ME.cjs → chunk-CHI52KFR.cjs} +855 -33
  132. package/dist/{chunk-DJDE4DTT.cjs → chunk-CWINVFRI.cjs} +25 -19
  133. package/dist/{chunk-HXGBSJL5.cjs → chunk-D2OSPLYC.cjs} +2 -2
  134. package/dist/{chunk-GBHDROGL.js → chunk-D6GZBSOX.js} +16 -4
  135. package/dist/{chunk-CNBKZEX5.cjs → chunk-DA7NBAJK.cjs} +49 -17
  136. package/dist/chunk-DEQVRSV5.cjs +866 -0
  137. package/dist/{chunk-RGR6ME5J.cjs → chunk-DI57A4BX.cjs} +25 -28
  138. package/dist/{chunk-WM5PAOTQ.cjs → chunk-DIZTWFVR.cjs} +1649 -484
  139. package/dist/{chunk-YZXUDM5X.js → chunk-DLP436GI.js} +204 -62
  140. package/dist/{chunk-OHUZKDGX.js → chunk-DMRXF5DU.js} +3 -3
  141. package/dist/{chunk-U46VYPLR.cjs → chunk-DPSIGY6L.cjs} +9 -9
  142. package/dist/{chunk-DN573ME7.cjs → chunk-DRWDEHE5.cjs} +4 -4
  143. package/dist/{chunk-SEKD5FH3.cjs → chunk-E26KKI46.cjs} +5 -2
  144. package/dist/{chunk-J4Q7XR3G.js → chunk-E46DJH5S.js} +3 -3
  145. package/dist/{chunk-Q7XSCYND.cjs → chunk-E6GFD7VR.cjs} +49 -26
  146. package/dist/chunk-ES2HJQ4N.js +37 -0
  147. package/dist/chunk-EZJHLOWP.js +80 -0
  148. package/dist/chunk-FFBDRUO5.cjs +59 -0
  149. package/dist/{chunk-AYSFIUFW.js → chunk-FGT6KK6T.js} +38 -15
  150. package/dist/{chunk-SAHBLB3E.js → chunk-FP46B4X3.js} +208 -3
  151. package/dist/{chunk-DSPQEHDT.js → chunk-FQAVGSPW.js} +2 -2
  152. package/dist/chunk-FQVG6ZHF.js +197 -0
  153. package/dist/chunk-GBMDFWJX.cjs +152 -0
  154. package/dist/{chunk-DRE2RXBZ.js → chunk-GGLKUENP.js} +1605 -440
  155. package/dist/{chunk-S52YW5ZQ.js → chunk-GNBBIAMD.js} +16 -19
  156. package/dist/{chunk-MYISNQH4.js → chunk-GWO66KBI.js} +1 -1
  157. package/dist/chunk-GWY26SUD.cjs +63 -0
  158. package/dist/{chunk-YGN4CQIP.js → chunk-GZ6DV2UG.js} +1 -1
  159. package/dist/{chunk-EZMINVLU.js → chunk-H4D2Q2AL.js} +5 -2
  160. package/dist/chunk-HDK2EHVH.cjs +570 -0
  161. package/dist/chunk-HJIXWGQZ.js +139 -0
  162. package/dist/{chunk-6RF7UKUS.js → chunk-HKYZSUQ5.js} +48 -47
  163. package/dist/{chunk-LQGVEP3E.js → chunk-HQUSEWT4.js} +45 -13
  164. package/dist/{chunk-HTLINWX6.cjs → chunk-HQWQZML5.cjs} +16 -13
  165. package/dist/{chunk-DVZOENQ7.cjs → chunk-HS4USDND.cjs} +9 -4
  166. package/dist/chunk-HSCUPEA4.cjs +3897 -0
  167. package/dist/{chunk-JCLYQ2JC.js → chunk-HXJEGMGB.js} +12 -6
  168. package/dist/{chunk-LJFUXC56.cjs → chunk-HXQREVTA.cjs} +9 -6
  169. package/dist/{chunk-SCXX4LW5.js → chunk-I24CWKKK.js} +15 -8
  170. package/dist/chunk-IAGCRVJ3.js +355 -0
  171. package/dist/chunk-IEXKKKOF.cjs +92 -0
  172. package/dist/{chunk-5IXII4HX.cjs → chunk-IGMPWJ2I.cjs} +19 -12
  173. package/dist/chunk-IKUMVBCW.cjs +33 -0
  174. package/dist/{chunk-XTB6VJVQ.cjs → chunk-J2K57QM7.cjs} +6 -6
  175. package/dist/{chunk-O4IF4NJT.cjs → chunk-J5ADZN6V.cjs} +57 -56
  176. package/dist/chunk-J5HE6CUM.cjs +124 -0
  177. package/dist/{chunk-JS7IPR7P.js → chunk-JAQO6XDB.js} +31 -2
  178. package/dist/chunk-JIMSII7R.js +987 -0
  179. package/dist/chunk-JJ4KA7HK.cjs +2219 -0
  180. package/dist/chunk-JMN3GZU6.js +570 -0
  181. package/dist/{chunk-X5VSP65C.cjs → chunk-JP3YHTQ2.cjs} +4 -4
  182. package/dist/{chunk-SKV2F3NM.js → chunk-JYKPWK5O.js} +1 -1
  183. package/dist/{chunk-NNPAM4HC.cjs → chunk-KNTUI4TZ.cjs} +12 -6
  184. package/dist/{chunk-HIVRCQS2.js → chunk-L4F7SUYL.js} +56 -25
  185. package/dist/{chunk-C5IJIM2V.cjs → chunk-LDJQ5QHG.cjs} +68 -37
  186. package/dist/{chunk-ULQ6MDSJ.cjs → chunk-LFDPTJYF.cjs} +43 -35
  187. package/dist/chunk-LJD7KR3L.cjs +44 -0
  188. package/dist/chunk-LN7D3EJZ.js +387 -0
  189. package/dist/{chunk-643VRA5S.cjs → chunk-LQBONA55.cjs} +32 -8
  190. package/dist/{chunk-NCC6ETZS.js → chunk-LUMV3DB2.js} +41 -33
  191. package/dist/chunk-M4KNC5BQ.js +78 -0
  192. package/dist/chunk-MO4KP6XS.cjs +229 -0
  193. package/dist/{chunk-BVKXEQVG.cjs → chunk-MOJ7ADW4.cjs} +22 -10
  194. package/dist/chunk-MPULXVC4.cjs +715 -0
  195. package/dist/{chunk-X5YJ34FZ.cjs → chunk-MQESBFBZ.cjs} +46 -23
  196. package/dist/chunk-MUNUUFU7.cjs +21 -0
  197. package/dist/{chunk-X3WS5LDG.js → chunk-MX75JYIY.js} +7 -5
  198. package/dist/chunk-MXVIDIC6.cjs +139 -0
  199. package/dist/{chunk-3K2ESU53.cjs → chunk-N6O3XUZ2.cjs} +2 -2
  200. package/dist/{chunk-IVM5F2AE.js → chunk-NBGOIFKP.js} +265 -18
  201. package/dist/{chunk-SLQAYV3W.js → chunk-NMQ47RCG.js} +8 -2
  202. package/dist/{chunk-JYTDYJVW.js → chunk-O64I2GYI.js} +1 -1
  203. package/dist/{chunk-IFFXSTOM.cjs → chunk-O6TQP7U7.cjs} +3 -3
  204. package/dist/{chunk-AYS2ASM7.js → chunk-OHWMWKJQ.js} +1 -1
  205. package/dist/{chunk-N23UAW4I.js → chunk-OM24WXEE.js} +7 -2
  206. package/dist/{chunk-MAKMSQMQ.cjs → chunk-OPNI6O7F.cjs} +8 -6
  207. package/dist/chunk-OR67YXQK.cjs +13 -0
  208. package/dist/{chunk-QOXPOR5D.js → chunk-OV3PVUYN.js} +115 -44
  209. package/dist/{chunk-TNZRZQ7Q.js → chunk-PB7W7R72.js} +3 -78
  210. package/dist/chunk-PCM3N3CL.cjs +37 -0
  211. package/dist/{chunk-A4IJHHV7.cjs → chunk-PDHT7LQS.cjs} +52 -11
  212. package/dist/{chunk-LA7H35XM.cjs → chunk-PHJO5YAL.cjs} +9 -9
  213. package/dist/{chunk-KPELYZ6L.js → chunk-PQLKJCIE.js} +2 -2
  214. package/dist/chunk-PUD76XQT.cjs +78 -0
  215. package/dist/chunk-Q2IL4DDI.cjs +355 -0
  216. package/dist/{chunk-WPVWQSL7.cjs → chunk-Q6AC3PHY.cjs} +16 -13
  217. package/dist/{chunk-XRZEUWKF.js → chunk-QCHIDZBA.js} +1 -1
  218. package/dist/{chunk-IQ5RXU6O.js → chunk-QEGOB6QV.js} +1 -1
  219. package/dist/{chunk-JSBRDJBE.js → chunk-QGM4M3NI.js} +8 -1
  220. package/dist/chunk-QKP772OZ.js +4291 -0
  221. package/dist/chunk-QQ7PANOP.js +59 -0
  222. package/dist/{chunk-YHD6TUIR.cjs → chunk-QW2RW2GY.cjs} +2 -0
  223. package/dist/chunk-RAKO7UN7.js +114 -0
  224. package/dist/chunk-RBHANOYY.js +33 -0
  225. package/dist/chunk-RBZ7AFX7.cjs +29 -0
  226. package/dist/{chunk-TXSDBGKX.cjs → chunk-REMGR23V.cjs} +46 -49
  227. package/dist/chunk-ROLA6EFO.cjs +85 -0
  228. package/dist/{chunk-TBEGGJNC.cjs → chunk-SOLBYSLY.cjs} +33 -16
  229. package/dist/{chunk-FKSDEWDH.js → chunk-SWCQM52V.js} +68 -25
  230. package/dist/{chunk-H5SWOLG6.js → chunk-TBOLJDUG.js} +39 -24
  231. package/dist/chunk-TH26BQJG.js +101 -0
  232. package/dist/{chunk-245KJE5Y.cjs → chunk-TJNBASFD.cjs} +14 -6
  233. package/dist/chunk-TKKN34TV.js +229 -0
  234. package/dist/chunk-TQ33WBY5.cjs +74 -0
  235. package/dist/{chunk-EGFT4PGW.js → chunk-TWQDAUZU.js} +5 -2
  236. package/dist/{chunk-OGV4WJ5L.cjs → chunk-TXPSTCG7.cjs} +74 -59
  237. package/dist/{chunk-CAMZTXV6.js → chunk-U4C3HW6P.js} +67 -52
  238. package/dist/{chunk-5P2NXKP3.js → chunk-UEIXJG45.js} +104 -76
  239. package/dist/{chunk-22D2CNTP.cjs → chunk-UGFVM77J.cjs} +5 -2
  240. package/dist/chunk-UOQECODR.js +34 -0
  241. package/dist/chunk-UR27UDTB.js +354 -0
  242. package/dist/chunk-UWFG2R2I.cjs +420 -0
  243. package/dist/{chunk-Y72HH2TF.cjs → chunk-UXLW45ZE.cjs} +102 -28
  244. package/dist/{chunk-FPHU2ES6.cjs → chunk-VBOFPU5M.cjs} +6 -0
  245. package/dist/{chunk-JX3DFKBI.js → chunk-VDWJMWDF.js} +54 -24
  246. package/dist/{chunk-LENHP55G.cjs → chunk-VGEV44V2.cjs} +1076 -158
  247. package/dist/{chunk-33RSHBDH.js → chunk-VKBIE6I6.js} +38 -7
  248. package/dist/{chunk-CWMZKFTT.js → chunk-VRMZO6TB.js} +31 -8
  249. package/dist/chunk-VUGOOGHB.js +400 -0
  250. package/dist/chunk-WBU4Q4GS.cjs +400 -0
  251. package/dist/chunk-WGLBC5AY.cjs +59 -0
  252. package/dist/{chunk-KWXVKLQ5.cjs → chunk-WGNMOVMT.cjs} +7 -82
  253. package/dist/{chunk-RKJTGGMU.cjs → chunk-WKRDBCP2.cjs} +221 -16
  254. package/dist/chunk-WRTXCQ3V.cjs +4291 -0
  255. package/dist/chunk-WTB7AFL6.cjs +101 -0
  256. package/dist/{chunk-NDMIPTV4.js → chunk-WZV6UVPY.js} +8 -3
  257. package/dist/chunk-XF2WIKHR.cjs +34 -0
  258. package/dist/{chunk-L3WAH3EM.cjs → chunk-XGMI6IYB.cjs} +46 -15
  259. package/dist/{chunk-FW774QXH.js → chunk-XIVFAD2L.js} +1048 -130
  260. package/dist/chunk-XV2HXRHX.js +85 -0
  261. package/dist/{chunk-72FKPBT5.js → chunk-Y3M2DABP.js} +16 -12
  262. package/dist/{chunk-QNGEW5TC.js → chunk-YV63VW4K.js} +1 -1
  263. package/dist/{chunk-UJ2JSM6H.js → chunk-YVQI26H4.js} +2 -0
  264. package/dist/{chunk-RD5XAJR2.cjs → chunk-YWTIXHU6.cjs} +266 -19
  265. package/dist/chunk-YZWE7XSM.js +5 -0
  266. package/dist/{chunk-I5IW3T2Y.js → chunk-Z3XSSF7B.js} +32 -15
  267. package/dist/{chunk-6UJMCWRY.js → chunk-Z4LIPMPM.js} +6 -0
  268. package/dist/chunk-ZASDSY7P.cjs +114 -0
  269. package/dist/{chunk-R33VKSH5.cjs → chunk-ZHJ7JGME.cjs} +11 -11
  270. package/dist/chunk-ZPD2AO3U.js +866 -0
  271. package/dist/{chunk-7UOUW76C.js → chunk-ZQAT5VT5.js} +101 -24
  272. package/dist/chunk-ZR46OJNZ.js +152 -0
  273. package/dist/{chunk-G3V4SFET.cjs → chunk-ZZ63NW7A.cjs} +78 -35
  274. package/dist/clear-33TWQ2ES.cjs +12 -0
  275. package/dist/clear-OFLFQ3MR.js +12 -0
  276. package/dist/{communityInstaller-6KCFN7YZ.js → communityInstaller-COB2KTOW.js} +9 -6
  277. package/dist/communityInstaller-TWMGPSYM.cjs +22 -0
  278. package/dist/completion-IIZMHXYP.cjs +17 -0
  279. package/dist/completion-PT4VM2H2.js +17 -0
  280. package/dist/config-KL6WU7R2.cjs +20 -0
  281. package/dist/{config-ZN66VXPS.js → config-R4O7GBTY.js} +7 -5
  282. package/dist/{constants-UFM5B232.js → constants-HVCHVQAF.js} +2 -2
  283. package/dist/constants-RLMJ5D5P.cjs +21 -0
  284. package/dist/{defaultHooks-RCXPHF4M.cjs → defaultHooks-2V2CQL63.cjs} +26 -11
  285. package/dist/{defaultHooks-RDRMER3Z.js → defaultHooks-TMHDU3FS.js} +26 -11
  286. package/dist/export-3PK3VFCE.js +15 -0
  287. package/dist/export-WLGNWEMJ.cjs +15 -0
  288. package/dist/{extractSessionMemories-V7K42ZHW.js → extractSessionMemories-A2JX5WJ2.js} +1 -1
  289. package/dist/{extractSessionMemories-SDW2MVBQ.cjs → extractSessionMemories-XL3MS37F.cjs} +1 -1
  290. package/dist/feedback-G635NCLJ.js +18 -0
  291. package/dist/feedback-LLMK3TZH.cjs +18 -0
  292. package/dist/fffSearchProvider-2YCNKOYD.js +412 -0
  293. package/dist/fffSearchProvider-W6627E2V.cjs +412 -0
  294. package/dist/filesystem-L6DQKGWK.js +11 -0
  295. package/dist/filesystem-PGUPCMVK.cjs +11 -0
  296. package/dist/{formatters-6K7QVWQL.cjs → formatters-53XTCNGQ.cjs} +1 -1
  297. package/dist/{formatters-DQHO5I36.js → formatters-T6KV4BPP.js} +1 -1
  298. package/dist/help-BAXLP2M2.cjs +12 -0
  299. package/dist/{help-2BLR7L43.js → help-X3OAZ3CY.js} +3 -3
  300. package/dist/history-6HOJSEMT.cjs +14 -0
  301. package/dist/{history-5FZ3M2AK.js → history-YKFPHBJN.js} +3 -3
  302. package/dist/hooks-7TA4PIIB.js +18 -0
  303. package/dist/hooks-XVFU67T2.cjs +18 -0
  304. package/dist/{i18n-K7QOWIBH.js → i18n-2KBUU7XL.js} +2 -2
  305. package/dist/i18n-MUJMKTFM.cjs +33 -0
  306. package/dist/ide-CCQ33PGC.cjs +15 -0
  307. package/dist/ide-VLVFBZ5F.js +15 -0
  308. package/dist/immediateCommandRouter-MTEHZXQX.js +15 -0
  309. package/dist/immediateCommandRouter-ROXU3MWT.cjs +15 -0
  310. package/dist/{import-UXM3VK7B.js → import-4CHYLS4K.js} +4 -4
  311. package/dist/{import-QEME3E4T.cjs → import-I7T4ZHYL.cjs} +4 -4
  312. package/dist/import-J46F54JY.cjs +10 -0
  313. package/dist/import-JWPYKXCZ.js +10 -0
  314. package/dist/index.cjs +747 -22356
  315. package/dist/index.d.cts +93 -0
  316. package/dist/index.d.ts +93 -0
  317. package/dist/index.js +786 -22395
  318. package/dist/init-262MWZV4.js +10 -0
  319. package/dist/init-EE5Y7RBL.cjs +10 -0
  320. package/dist/inkMode-VUE6ZDLD.cjs +7 -0
  321. package/dist/inkMode-WBNFOSAT.js +7 -0
  322. package/dist/inputPrompt-IIFKCX5Q.cjs +90 -0
  323. package/dist/inputPrompt-YGBHDUEP.js +90 -0
  324. package/dist/language-CVLPB7OV.js +21 -0
  325. package/dist/language-ZTWFHUSV.cjs +21 -0
  326. package/dist/learn-PON7I5QS.js +23 -0
  327. package/dist/learn-XLRSVNA3.cjs +23 -0
  328. package/dist/{lint-D5UOJWIK.cjs → lint-4NDGCSCL.cjs} +1 -1
  329. package/dist/{lint-NJPZWVN2.js → lint-FZ7ZJUB3.js} +1 -1
  330. package/dist/login-223QTGBG.cjs +26 -0
  331. package/dist/login-6IKTBUBY.js +26 -0
  332. package/dist/logout-RN2AG6SI.js +23 -0
  333. package/dist/logout-U3M4FFX7.cjs +23 -0
  334. package/dist/mcp-5O6PUL4G.js +20 -0
  335. package/dist/mcp-NUQ76QQB.cjs +20 -0
  336. package/dist/{mcp-install-VESN42PI.js → mcp-install-6XWXLFVY.js} +18 -11
  337. package/dist/{mcp-install-G27HSS3Z.cjs → mcp-install-P6DHES7V.cjs} +22 -15
  338. package/dist/memory-CYMDQ2YC.cjs +10 -0
  339. package/dist/memory-Q54CESNM.js +10 -0
  340. package/dist/{message-ZJ5AYAMT.cjs → message-4OKO775J.cjs} +1 -1
  341. package/dist/{message-JUBOK2VU.js → message-X3LOAAM7.js} +1 -1
  342. package/dist/model-6AJ77PJG.js +10 -0
  343. package/dist/model-IDRCKDML.cjs +10 -0
  344. package/dist/new-7LEWOUF2.cjs +12 -0
  345. package/dist/new-ZXHEWC2S.js +12 -0
  346. package/dist/onboarding-FXX7YHSJ.cjs +35 -0
  347. package/dist/onboarding-JYNMK6NI.js +35 -0
  348. package/dist/{patch-MOD7QC3D.cjs → patch-DJ2GPFST.cjs} +1 -1
  349. package/dist/{patch-5F6VBIT3.js → patch-NIJWIRHS.js} +1 -1
  350. package/dist/permissions-YBNSANIA.cjs +10 -0
  351. package/dist/permissions-YHJMVA6L.js +10 -0
  352. package/dist/plan-XEJMOT55.cjs +13 -0
  353. package/dist/plan-YYUAXPTL.js +13 -0
  354. package/dist/pr-review-CW6J7P62.cjs +9 -0
  355. package/dist/pr-review-YZSBQVT2.js +9 -0
  356. package/dist/quit-B43SJ6E4.cjs +10 -0
  357. package/dist/quit-GWTNHQSP.js +10 -0
  358. package/dist/rawMode-6W5AXAKI.cjs +7 -0
  359. package/dist/rawMode-GFNLXQPU.js +7 -0
  360. package/dist/{registry-KWZGYJC2.js → registry-34GL6BNJ.js} +30 -45
  361. package/dist/{registry-YN4FQPOO.cjs → registry-V24W7YK6.cjs} +66 -81
  362. package/dist/repeat-P4FAPE3Y.cjs +17 -0
  363. package/dist/repeat-RALE6AUO.js +17 -0
  364. package/dist/resume-DYVOQN5L.cjs +16 -0
  365. package/dist/resume-M25UQKOX.js +16 -0
  366. package/dist/review-QHP2KP4Q.js +9 -0
  367. package/dist/review-UWHWQHCB.cjs +9 -0
  368. package/dist/ripgrep-67SCU2BA.cjs +9 -0
  369. package/dist/ripgrep-VHJQQ55W.js +9 -0
  370. package/dist/rpc-NPS3PU4O.cjs +3730 -0
  371. package/dist/rpc-S3DGW6KV.js +3730 -0
  372. package/dist/search-CPX4PWHP.js +20 -0
  373. package/dist/search-VUF3M4N3.cjs +20 -0
  374. package/dist/{session-BSU2L5UI.cjs → session-LXKC4X5Q.cjs} +1 -1
  375. package/dist/{session-SZMRN5KG.js → session-NMMO4QOL.js} +1 -1
  376. package/dist/sessions-IYAXMK23.js +10 -0
  377. package/dist/sessions-JODKER5D.cjs +10 -0
  378. package/dist/settings-55BNW6BF.js +33 -0
  379. package/dist/settings-BKTS7OMC.cjs +33 -0
  380. package/dist/setup-IRC5HQG2.js +29 -0
  381. package/dist/setup-MMQ7TWOP.cjs +29 -0
  382. package/dist/share-6JRQECAH.cjs +17 -0
  383. package/dist/share-YM5MJKMO.js +17 -0
  384. package/dist/{skills-FYY6F2WV.cjs → skills-GGMZOVIE.cjs} +14 -11
  385. package/dist/skills-LWSOKOSH.cjs +29 -0
  386. package/dist/{skills-6OL4OSGA.js → skills-MVIZNHT4.js} +13 -10
  387. package/dist/skills-VWOMV3CR.js +29 -0
  388. package/dist/{skills-install-6CSWC24P.js → skills-install-QBA5RCV6.js} +22 -71
  389. package/dist/{skills-install-O3LZ2ETC.cjs → skills-install-VTAMCNNY.cjs} +35 -84
  390. package/dist/skills-new-GPL46YV2.js +18 -0
  391. package/dist/skills-new-L5BEZN5V.cjs +18 -0
  392. package/dist/slashCommands-FBPCIWM5.cjs +95 -0
  393. package/dist/slashCommands-FCWY5DXW.js +95 -0
  394. package/dist/status-3B5SDZPL.js +17 -0
  395. package/dist/status-TTGRF6NC.cjs +17 -0
  396. package/dist/summarizer-DGPHE5IQ.js +17 -0
  397. package/dist/summarizer-JNXLUAQG.cjs +17 -0
  398. package/dist/sync-77CXVVTK.cjs +21 -0
  399. package/dist/{sync-KWX67OUN.js → sync-7BILIQHP.js} +4 -4
  400. package/dist/sync-7OKF6636.js +21 -0
  401. package/dist/sync-EH4K5U3N.cjs +40 -0
  402. package/dist/{tasks-5FPBIFLC.js → tasks-R5MBGAQ6.js} +1 -1
  403. package/dist/{tasks-TXGKGNH6.cjs → tasks-V4WB3MFR.cjs} +1 -1
  404. package/dist/{team-5YXP3JGR.js → team-JESCHGWB.js} +1 -1
  405. package/dist/{team-IIWEZKNR.cjs → team-VQQKWGZB.cjs} +1 -1
  406. package/dist/{teammate-L6EZQ3I2.js → teammate-GZQSCIMS.js} +29 -8
  407. package/dist/{teammate-2KMKJXAM.cjs → teammate-J6PHGL23.cjs} +30 -9
  408. package/dist/theme-64BYGJ57.cjs +21 -0
  409. package/dist/theme-YJE6HEON.js +21 -0
  410. package/dist/tools-3PPTTKFV.js +9 -0
  411. package/dist/tools-THIQA7WC.cjs +9 -0
  412. package/dist/ui/questionModal.cjs +9 -6
  413. package/dist/ui/questionModal.js +8 -5
  414. package/dist/undo-PRTEGL2J.cjs +10 -0
  415. package/dist/undo-SZEHLX7X.js +10 -0
  416. package/dist/{update-TVAJMMBC.js → update-53WMKYVS.js} +1 -1
  417. package/dist/{update-Z6BIIQDC.cjs → update-NV6QRYY7.cjs} +1 -1
  418. package/dist/web-3BA2WV37.cjs +37 -0
  419. package/dist/web-6FYGBX5K.js +37 -0
  420. package/dist/workspaceSafety-MDJGHK6D.cjs +9 -0
  421. package/dist/workspaceSafety-XOUMUBVB.js +9 -0
  422. package/dist/yolo-GF2YD7ZI.js +9 -0
  423. package/dist/yolo-OGDA7HNC.cjs +9 -0
  424. package/dist/yoloMode-3DJDA75U.cjs +17 -0
  425. package/dist/yoloMode-4JOOSU26.js +17 -0
  426. package/package.json +46 -49
  427. package/dist/AgentRegistry-NQCLWABO.cjs +0 -10
  428. package/dist/CommunitySkillsCache-6QPRMTJO.js +0 -8
  429. package/dist/CommunitySkillsCache-GTQMOCCO.cjs +0 -8
  430. package/dist/GitHubRegistryFetcher-S7QFUEKV.cjs +0 -7
  431. package/dist/HookManager-Q2KYMCP4.cjs +0 -7
  432. package/dist/HookManager-TTP4Y6DC.js +0 -7
  433. package/dist/LearnAdvisor-A4Q5PPBI.js +0 -9
  434. package/dist/LearnAdvisor-GASQD7HT.cjs +0 -9
  435. package/dist/McpClientManager-RKD7C6OY.cjs +0 -8
  436. package/dist/MemoryManager-GUNLRP5S.js +0 -8
  437. package/dist/MemoryManager-TNSGKDKX.cjs +0 -8
  438. package/dist/PermissionManager-KMN53FJP.cjs +0 -11
  439. package/dist/ProviderFactory-MR5B23QJ.js +0 -9
  440. package/dist/ProviderFactory-VFGCJJX6.cjs +0 -9
  441. package/dist/SessionManager-FEUAU3ZJ.cjs +0 -10
  442. package/dist/SessionManager-IKWAK2PI.js +0 -10
  443. package/dist/SkillsRegistry-KPQFTRIT.cjs +0 -9
  444. package/dist/SkillsRegistry-XJSKPDF2.js +0 -9
  445. package/dist/SubAgent-NYH6GWQ3.js +0 -11
  446. package/dist/SubAgent-PZKBDUBA.cjs +0 -11
  447. package/dist/SyncApiClient-ZNYMT36M.cjs +0 -11
  448. package/dist/about-HHTF2YFL.js +0 -12
  449. package/dist/about-JGRVNNQC.cjs +0 -12
  450. package/dist/actionExecutor-U6IBN2TU.cjs +0 -19
  451. package/dist/actionExecutor-XT5FW3W6.js +0 -19
  452. package/dist/add-dir-247K3XRY.js +0 -10
  453. package/dist/add-dir-GS4DXKKH.cjs +0 -10
  454. package/dist/agents-R6ZEFTVR.cjs +0 -12
  455. package/dist/agents-WJPQWQF2.js +0 -12
  456. package/dist/agents-new-HKVEIBDJ.js +0 -14
  457. package/dist/agents-new-X6GTHIO6.cjs +0 -14
  458. package/dist/autoSkill-H4T6VVDA.cjs +0 -20
  459. package/dist/automode-BC6NVECO.js +0 -10
  460. package/dist/automode-WN2RSOGW.cjs +0 -10
  461. package/dist/chunk-33A755XB.cjs +0 -168
  462. package/dist/chunk-3OTU3RS3.cjs +0 -1607
  463. package/dist/chunk-4PKF7WPD.js +0 -100
  464. package/dist/chunk-ALYU6VTM.js +0 -105
  465. package/dist/chunk-AS6RTLN7.cjs +0 -203
  466. package/dist/chunk-BWN2CLLM.cjs +0 -298
  467. package/dist/chunk-HQ7YZKXE.js +0 -168
  468. package/dist/chunk-HVKOZ2VP.cjs +0 -115
  469. package/dist/chunk-J6QET7EF.cjs +0 -454
  470. package/dist/chunk-LWUJFGOZ.js +0 -115
  471. package/dist/chunk-P47WPOXN.js +0 -298
  472. package/dist/chunk-PRRCJFU3.cjs +0 -85
  473. package/dist/chunk-RO6WYEWH.js +0 -454
  474. package/dist/chunk-SYVYLZZF.cjs +0 -24
  475. package/dist/chunk-T73IDKDF.js +0 -111
  476. package/dist/chunk-YRLYSQEQ.cjs +0 -105
  477. package/dist/chunk-ZQE72E6W.cjs +0 -100
  478. package/dist/chunk-ZVY2XD6T.js +0 -1607
  479. package/dist/clear-UO4MNWZW.cjs +0 -12
  480. package/dist/clear-ZJ5NYP6E.js +0 -12
  481. package/dist/communityInstaller-PVSOFDZD.cjs +0 -19
  482. package/dist/completion-MMF2PN2H.js +0 -14
  483. package/dist/completion-UI5WKHXI.cjs +0 -14
  484. package/dist/config-E7RINK4R.cjs +0 -18
  485. package/dist/constants-6CPCJ3DY.cjs +0 -21
  486. package/dist/export-N4XIVDSL.cjs +0 -12
  487. package/dist/export-W22L4D5C.js +0 -12
  488. package/dist/feedback-DR6ADSNE.cjs +0 -15
  489. package/dist/feedback-FEEAP4QW.js +0 -15
  490. package/dist/filesystem-3SGCW2BF.js +0 -10
  491. package/dist/filesystem-MCFXJQ6R.cjs +0 -10
  492. package/dist/help-AQHGTS7P.cjs +0 -12
  493. package/dist/history-NIUDRMKA.cjs +0 -14
  494. package/dist/hooks-2EY4IPKV.js +0 -13
  495. package/dist/hooks-LJVORRIG.cjs +0 -13
  496. package/dist/i18n-ARDG2SMC.cjs +0 -33
  497. package/dist/ide-GFW6IJHD.js +0 -12
  498. package/dist/ide-N2ZNSSB3.cjs +0 -12
  499. package/dist/import-DFVN3KNZ.js +0 -10
  500. package/dist/import-ZS6DPGU5.cjs +0 -10
  501. package/dist/init-PY75HA3S.cjs +0 -10
  502. package/dist/init-QNMWLAVY.js +0 -10
  503. package/dist/language-5UE4G2BT.cjs +0 -18
  504. package/dist/language-UXMHEZUJ.js +0 -18
  505. package/dist/learn-HJ3FLNZC.cjs +0 -20
  506. package/dist/learn-MVYS3RU5.js +0 -20
  507. package/dist/localProjectPermissions-N77HA3XK.js +0 -18
  508. package/dist/localProjectPermissions-UFSMNTBJ.cjs +0 -18
  509. package/dist/login-DSE7H63A.js +0 -20
  510. package/dist/login-V3MEWPKN.cjs +0 -20
  511. package/dist/logout-BMVCLKKW.js +0 -18
  512. package/dist/logout-XEG7FHOZ.cjs +0 -18
  513. package/dist/mcp-PYUR4PHO.js +0 -18
  514. package/dist/mcp-SG6JFLGC.cjs +0 -18
  515. package/dist/memory-4ZMMEZ2Z.js +0 -10
  516. package/dist/memory-QSGMVVGH.cjs +0 -10
  517. package/dist/model-NANLBZ4Z.cjs +0 -10
  518. package/dist/model-ZXNV4AF7.js +0 -10
  519. package/dist/new-5QJY5JP2.js +0 -12
  520. package/dist/new-PMMG55UX.cjs +0 -12
  521. package/dist/permissions-LECTCJ4H.cjs +0 -13
  522. package/dist/permissions-VP5VGIBL.js +0 -13
  523. package/dist/plan-G5CEKJI4.js +0 -11
  524. package/dist/plan-QKOHE3LH.cjs +0 -11
  525. package/dist/quit-BKOOPHU5.cjs +0 -10
  526. package/dist/quit-FVFNYACP.js +0 -10
  527. package/dist/resume-EXFQSQPH.js +0 -13
  528. package/dist/resume-PP2IQM5S.cjs +0 -13
  529. package/dist/search-C56FBN67.cjs +0 -17
  530. package/dist/search-XGZDYBF4.js +0 -17
  531. package/dist/sessions-54KI3F2Q.js +0 -10
  532. package/dist/sessions-DDTSPNVW.cjs +0 -10
  533. package/dist/settings-BDO37TTO.cjs +0 -30
  534. package/dist/settings-FHRDFPLK.js +0 -30
  535. package/dist/share-IERCTBGN.cjs +0 -14
  536. package/dist/share-TGROUE6R.js +0 -14
  537. package/dist/skills-OM4IGBAA.cjs +0 -26
  538. package/dist/skills-S3GRN323.js +0 -26
  539. package/dist/skills-new-ALD2PTHN.js +0 -15
  540. package/dist/skills-new-PWLKK7GW.cjs +0 -15
  541. package/dist/slashCommands-L4ZD33LJ.js +0 -75
  542. package/dist/slashCommands-YY2VUUDF.cjs +0 -75
  543. package/dist/status-3PC5XWSS.cjs +0 -11
  544. package/dist/status-KCLVOYPD.js +0 -11
  545. package/dist/sync-6SDWG5RK.js +0 -18
  546. package/dist/sync-7JMZVEQD.cjs +0 -40
  547. package/dist/sync-WHURZL3U.cjs +0 -18
  548. package/dist/theme-BE5A4FPN.cjs +0 -18
  549. package/dist/theme-YMFCQP7J.js +0 -18
  550. package/dist/undo-KZHUUZTD.cjs +0 -10
  551. package/dist/undo-NEIEHQVX.js +0 -10
@@ -0,0 +1,987 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class; var _class2; var _class3;
2
+
3
+ var _chunkREMGR23Vcjs = require('./chunk-REMGR23V.cjs');
4
+
5
+
6
+ var _chunk3OF56EMAcjs = require('./chunk-3OF56EMA.cjs');
7
+
8
+
9
+ var _chunk2VHB43IXcjs = require('./chunk-2VHB43IX.cjs');
10
+
11
+
12
+
13
+ var _chunkE26KKI46cjs = require('./chunk-E26KKI46.cjs');
14
+
15
+ // src/utils/sessionWorktree.ts
16
+ var _child_process = require('child_process');
17
+ var _fs = require('fs');
18
+ var _path = require('path'); var _path2 = _interopRequireDefault(_path);
19
+ var _crypto = require('crypto'); var _crypto2 = _interopRequireDefault(_crypto);
20
+ function runGit(cwd, args) {
21
+ const result = _child_process.spawnSync.call(void 0, "git", args, {
22
+ cwd,
23
+ encoding: "utf8"
24
+ });
25
+ return {
26
+ stdout: _nullishCoalesce(result.stdout, () => ( "")),
27
+ stderr: _nullishCoalesce(result.stderr, () => ( "")),
28
+ status: result.status
29
+ };
30
+ }
31
+ function ensureGitRepo(cwd) {
32
+ const result = runGit(cwd, ["rev-parse", "--show-toplevel"]);
33
+ if (result.status !== 0) {
34
+ const details = result.stderr.trim() || result.stdout.trim() || "unknown error";
35
+ throw new Error(`--worktree requires a git repository (git rev-parse failed: ${details})`);
36
+ }
37
+ return result.stdout.trim();
38
+ }
39
+ function sanitizeName(input) {
40
+ const trimmed = input.trim();
41
+ const normalized = trimmed.toLowerCase().replace(/[^a-z0-9._-]+/g, "-").replace(/^-+/, "").replace(/-+$/, "");
42
+ return normalized || "autohand-worktree";
43
+ }
44
+ function buildAutoBranchName(mode) {
45
+ const ts = Date.now().toString(36);
46
+ const rand = _crypto2.default.randomBytes(3).toString("hex");
47
+ return sanitizeName(`autohand-${_nullishCoalesce(mode, () => ( "cli"))}-${ts}-${rand}`);
48
+ }
49
+ function branchExists(repoRoot, branchName) {
50
+ const result = runGit(repoRoot, ["show-ref", "--verify", "--quiet", `refs/heads/${branchName}`]);
51
+ return result.status === 0;
52
+ }
53
+ function findAvailablePath(basePath) {
54
+ if (!_fs.existsSync.call(void 0, basePath)) {
55
+ return basePath;
56
+ }
57
+ for (let i = 2; i < 1e3; i++) {
58
+ const candidate = `${basePath}-${i}`;
59
+ if (!_fs.existsSync.call(void 0, candidate)) {
60
+ return candidate;
61
+ }
62
+ }
63
+ throw new Error(`Unable to find available worktree path near ${basePath}`);
64
+ }
65
+ function isSessionWorktreeEnabled(worktree) {
66
+ return worktree !== void 0 && worktree !== false;
67
+ }
68
+ function prepareSessionWorktree(input) {
69
+ const repoRoot = ensureGitRepo(input.cwd);
70
+ const branchName = typeof input.worktree === "string" ? sanitizeName(input.worktree) : buildAutoBranchName(input.mode);
71
+ const repoName = _path2.default.basename(repoRoot);
72
+ const parentDir = _path2.default.dirname(repoRoot);
73
+ const basePath = _path2.default.join(parentDir, `${repoName}-${branchName}`);
74
+ const worktreePath = findAvailablePath(basePath);
75
+ const existingBranch = branchExists(repoRoot, branchName);
76
+ const args = existingBranch ? ["worktree", "add", worktreePath, branchName] : ["worktree", "add", "-b", branchName, worktreePath];
77
+ const result = runGit(repoRoot, args);
78
+ if (result.status !== 0) {
79
+ const details = result.stderr.trim() || result.stdout.trim() || "unknown error";
80
+ throw new Error(`Failed to create git worktree: ${details}`);
81
+ }
82
+ return {
83
+ repoRoot,
84
+ worktreePath,
85
+ branchName,
86
+ createdBranch: !existingBranch
87
+ };
88
+ }
89
+
90
+ // src/ui/theme/startup.ts
91
+ var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
92
+ function formatStartupBanner(logo) {
93
+ return logo.split("\n").map((line, index) => _chunk2VHB43IXcjs.themedFg.call(void 0, index % 2 === 0 ? "accent" : "borderAccent", line, _chalk2.default.cyan)).join("\n");
94
+ }
95
+ function formatWelcomeVersionPrefix(version) {
96
+ return `${_chunk2VHB43IXcjs.themedFg.call(void 0, "accent", "> Autohand", _chalk2.default.bold)} ${_chunk2VHB43IXcjs.themedFg.call(void 0, "muted", `v${version}`, _chalk2.default.gray)}`;
97
+ }
98
+ function formatUpdateAvailable(version) {
99
+ return _chunk2VHB43IXcjs.themedFg.call(void 0, "warning", ` \u2B06 Update available: v${version}`, _chalk2.default.yellow);
100
+ }
101
+ function formatUpdateReady() {
102
+ return _chunk2VHB43IXcjs.themedFg.call(void 0, "success", " \u2713 Up to date", _chalk2.default.green);
103
+ }
104
+ function formatInstallHint(hint) {
105
+ return `${_chunk2VHB43IXcjs.themedFg.call(void 0, "muted", " \u21B3 Run: ", _chalk2.default.gray)}${_chunk2VHB43IXcjs.themedFg.call(void 0, "accent", hint, _chalk2.default.cyan)}`;
106
+ }
107
+ function formatWelcomeGreeting(nameOrEmail) {
108
+ return _chunk2VHB43IXcjs.themedFg.call(void 0, "success", `Welcome back, ${nameOrEmail}!`, _chalk2.default.green);
109
+ }
110
+ function formatWelcomeStatusLine(model, ccEnabled, dir) {
111
+ const ccStatus = ccEnabled ? _chunk2VHB43IXcjs.themedFg.call(void 0, "success", "[CC: ON]", _chalk2.default.green) : _chunk2VHB43IXcjs.themedFg.call(void 0, "warning", "[CC: OFF]", _chalk2.default.yellow);
112
+ return [
113
+ _chunk2VHB43IXcjs.themedFg.call(void 0, "muted", "model:", _chalk2.default.gray),
114
+ _chunk2VHB43IXcjs.themedFg.call(void 0, "accent", model, _chalk2.default.cyan),
115
+ ccStatus,
116
+ _chunk2VHB43IXcjs.themedFg.call(void 0, "muted", "| directory:", _chalk2.default.gray),
117
+ _chunk2VHB43IXcjs.themedFg.call(void 0, "accent", dir, _chalk2.default.cyan)
118
+ ].join(" ");
119
+ }
120
+ function formatWelcomeTitle() {
121
+ return _chunk2VHB43IXcjs.themedFg.call(void 0, "muted", "To get started, describe a task or try one of these commands:", _chalk2.default.gray);
122
+ }
123
+ function formatWelcomeSuggestion(command, description) {
124
+ return _chunk2VHB43IXcjs.themedFg.call(void 0, "accent", `${command} `, _chalk2.default.cyan) + _chunk2VHB43IXcjs.themedFg.call(void 0, "muted", description, _chalk2.default.gray);
125
+ }
126
+ function formatSessionEnding() {
127
+ return _chunk2VHB43IXcjs.themedFg.call(void 0, "muted", "Ending Autohand session.", _chalk2.default.gray);
128
+ }
129
+ function formatSessionSaved(sessionId) {
130
+ return _chunk2VHB43IXcjs.themedFg.call(void 0, "accent", `\u{1F4BE} Session saved: ${sessionId}`, _chalk2.default.cyan);
131
+ }
132
+ function formatResumeHint(sessionId) {
133
+ return _chunk2VHB43IXcjs.themedFg.call(void 0, "muted", ` Resume with: autohand resume ${sessionId}`, _chalk2.default.gray);
134
+ }
135
+ function formatExitCleanup() {
136
+ return _chunk2VHB43IXcjs.themedFg.call(void 0, "muted", "\nExiting - clearing queues and stopping...", _chalk2.default.gray);
137
+ }
138
+ function formatForceExit() {
139
+ return _chunk2VHB43IXcjs.themedFg.call(void 0, "muted", "\nForce exiting...", _chalk2.default.gray);
140
+ }
141
+
142
+ // src/utils/debugLog.ts
143
+ function isAutohandDebugEnabled(env = process.env) {
144
+ const value = _optionalChain([env, 'access', _ => _.AUTOHAND_DEBUG, 'optionalAccess', _2 => _2.trim, 'call', _3 => _3(), 'access', _4 => _4.toLowerCase, 'call', _5 => _5()]);
145
+ return value === "1" || value === "true";
146
+ }
147
+ function writeAutohandDebugLine(message, writer) {
148
+ if (!isAutohandDebugEnabled()) {
149
+ return;
150
+ }
151
+ if (writer) {
152
+ writer(message);
153
+ return;
154
+ }
155
+ const line = message.endsWith("\n") ? message : `${message}
156
+ `;
157
+ process.stderr.write(line);
158
+ }
159
+
160
+ // src/reporting/AutoReportManager.ts
161
+
162
+
163
+ // src/reporting/AutoReportClient.ts
164
+
165
+ var _fsextra = require('fs-extra'); var _fsextra2 = _interopRequireDefault(_fsextra);
166
+ var _os = require('os'); var _os2 = _interopRequireDefault(_os);
167
+ var DEVICE_ID_FILE = _chunkE26KKI46cjs.AUTOHAND_FILES.deviceId;
168
+ var AutoReportClient = class {
169
+
170
+ constructor(apiBaseUrl = "https://api.autohand.ai") {
171
+ this.apiBaseUrl = apiBaseUrl;
172
+ }
173
+ /**
174
+ * Read device ID from ~/.autohand/device-id (shared with telemetry)
175
+ */
176
+ getDeviceId() {
177
+ try {
178
+ if (_fsextra2.default.existsSync(DEVICE_ID_FILE)) {
179
+ return _fsextra2.default.readFileSync(DEVICE_ID_FILE, "utf8").trim();
180
+ }
181
+ } catch (e) {
182
+ }
183
+ return `anon-${_crypto2.default.randomUUID().slice(0, 8)}`;
184
+ }
185
+ /**
186
+ * Sanitize a string by replacing absolute paths with safe equivalents.
187
+ * Removes user home directories and any user-identifying paths.
188
+ */
189
+ sanitizePaths(text) {
190
+ const home = _os2.default.homedir();
191
+ let sanitized = text;
192
+ sanitized = sanitized.replaceAll(home, "~");
193
+ sanitized = sanitized.replace(/\/Users\/[^/\s:]+/g, "~/...");
194
+ sanitized = sanitized.replace(/\/home\/[^/\s:]+/g, "~/...");
195
+ sanitized = sanitized.replace(/[A-Z]:\\Users\\[^\\\s:]+/gi, "~\\...");
196
+ sanitized = sanitized.replace(/\\\\[^\\]+\\[^\\]+\\[^\\\s:]+/g, "~\\...");
197
+ return sanitized;
198
+ }
199
+ /** @deprecated Use sanitizePaths() instead */
200
+ sanitizeStack(stack) {
201
+ return this.sanitizePaths(stack);
202
+ }
203
+ /**
204
+ * Send an error report to the API
205
+ * NEVER throws - always returns a ReportResponse
206
+ */
207
+ async report(data) {
208
+ try {
209
+ const payload = {
210
+ ...data,
211
+ deviceId: this.getDeviceId(),
212
+ cliVersion: _chunkREMGR23Vcjs.package_default.version,
213
+ platform: process.platform,
214
+ osVersion: _os2.default.release(),
215
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
216
+ };
217
+ const controller = new AbortController();
218
+ const timeoutId = setTimeout(() => controller.abort(), 5e3);
219
+ try {
220
+ const response = await fetch(`${this.apiBaseUrl}/v1/reports`, {
221
+ method: "POST",
222
+ headers: {
223
+ "Content-Type": "application/json",
224
+ "X-CLI-Version": _chunkREMGR23Vcjs.package_default.version,
225
+ "X-Device-ID": payload.deviceId
226
+ },
227
+ body: JSON.stringify(payload),
228
+ signal: controller.signal
229
+ });
230
+ clearTimeout(timeoutId);
231
+ if (!response.ok) {
232
+ const errorText = await response.text().catch(() => "Unknown error");
233
+ return { success: false, error: `HTTP ${response.status}: ${errorText}` };
234
+ }
235
+ const result = await response.json();
236
+ return result;
237
+ } catch (err) {
238
+ clearTimeout(timeoutId);
239
+ if (err.name === "AbortError") {
240
+ return { success: false, error: "Request timeout" };
241
+ }
242
+ return { success: false, error: err.message };
243
+ }
244
+ } catch (err) {
245
+ return { success: false, error: err.message };
246
+ }
247
+ }
248
+ };
249
+
250
+ // src/reporting/AutoReportManager.ts
251
+ var isDebug = () => isAutohandDebugEnabled();
252
+ var AutoReportManager = (_class = class _AutoReportManager {
253
+
254
+ __init() {this.reportedHashes = /* @__PURE__ */ new Set()}
255
+
256
+ constructor(config, _cliVersion) {;_class.prototype.__init.call(this);
257
+ const apiBaseUrl = _optionalChain([config, 'access', _6 => _6.api, 'optionalAccess', _7 => _7.baseUrl]) || "https://api.autohand.ai";
258
+ this.client = new AutoReportClient(apiBaseUrl);
259
+ this.enabled = _optionalChain([config, 'access', _8 => _8.autoReport, 'optionalAccess', _9 => _9.enabled]) !== false;
260
+ }
261
+ /**
262
+ * Check if auto-reporting is enabled
263
+ */
264
+ isEnabled() {
265
+ return this.enabled;
266
+ }
267
+ /**
268
+ * API error codes that represent expected operational conditions, NOT bugs.
269
+ * These should never be auto-reported as GitHub issues.
270
+ */
271
+ static __initStatic() {this.OPERATIONAL_API_ERROR_CODES = /* @__PURE__ */ new Set([
272
+ "rate_limited",
273
+ // User hit rate limits — expected, handled by retry
274
+ "cancelled",
275
+ // User cancelled the request
276
+ "timeout",
277
+ // Provider too slow — expected for local inference
278
+ "network_error",
279
+ // Can't reach provider — user's network
280
+ "server_error",
281
+ // Provider is down — not our bug
282
+ "auth_failed",
283
+ // Bad API key — user config issue
284
+ "payment_required",
285
+ // Account billing issue
286
+ "access_denied",
287
+ // API key lacks permissions
288
+ "model_not_found"
289
+ // Wrong model name — user config issue
290
+ ])}
291
+ /**
292
+ * Check if an error represents an expected operational condition
293
+ * that should NOT be auto-reported as a bug.
294
+ */
295
+ isOperationalError(error) {
296
+ if (error instanceof _chunk3OF56EMAcjs.ApiError) {
297
+ return _AutoReportManager.OPERATIONAL_API_ERROR_CODES.has(error.code);
298
+ }
299
+ return false;
300
+ }
301
+ /**
302
+ * Compute a simple hash from error name + message for in-session deduplication
303
+ */
304
+ computeHash(error) {
305
+ const key = `${error.name}:${error.message.slice(0, 200)}`;
306
+ return _crypto2.default.createHash("sha256").update(key).digest("hex").slice(0, 16);
307
+ }
308
+ /**
309
+ * Report an error to the API
310
+ * NEVER throws - silently handles all failures
311
+ */
312
+ async reportError(error, context) {
313
+ try {
314
+ if (!this.enabled) return;
315
+ if (this.isOperationalError(error)) {
316
+ if (isDebug()) {
317
+ process.stderr.write(`[autohand:report] Skipping operational error: ${error.code}
318
+ `);
319
+ }
320
+ return;
321
+ }
322
+ const hash = this.computeHash(error);
323
+ if (this.reportedHashes.has(hash)) {
324
+ if (isDebug()) {
325
+ process.stderr.write(`[autohand:report] Skipping duplicate error: ${hash}
326
+ `);
327
+ }
328
+ return;
329
+ }
330
+ this.reportedHashes.add(hash);
331
+ const report = {
332
+ errorType: _optionalChain([context, 'optionalAccess', _10 => _10.errorType]) || error.name,
333
+ errorMessage: this.client.sanitizePaths(error.message.slice(0, 500)),
334
+ sanitizedStack: error.stack ? this.client.sanitizePaths(error.stack) : void 0,
335
+ ...context
336
+ };
337
+ const result = await this.client.report(report);
338
+ if (result.success) {
339
+ if (isDebug()) {
340
+ process.stderr.write(`[autohand:report] Reported: issue=${_nullishCoalesce(result.issueNumber, () => ( "n/a"))} dedup=${_nullishCoalesce(result.deduplicated, () => ( false))}
341
+ `);
342
+ }
343
+ return;
344
+ }
345
+ if (isDebug()) {
346
+ process.stderr.write(`[autohand:report] First attempt failed: ${result.error}, retrying...
347
+ `);
348
+ }
349
+ await new Promise((resolve) => setTimeout(resolve, 2e3));
350
+ const retryResult = await this.client.report(report);
351
+ if (isDebug()) {
352
+ if (retryResult.success) {
353
+ process.stderr.write(`[autohand:report] Retry succeeded: issue=${_nullishCoalesce(retryResult.issueNumber, () => ( "n/a"))}
354
+ `);
355
+ } else {
356
+ process.stderr.write(`[autohand:report] Retry failed: ${retryResult.error}, giving up
357
+ `);
358
+ }
359
+ }
360
+ } catch (e2) {
361
+ if (isDebug()) {
362
+ process.stderr.write(`[autohand:report] Unexpected error in reportError, giving up
363
+ `);
364
+ }
365
+ }
366
+ }
367
+ }, _class.__initStatic(), _class);
368
+
369
+ // src/telemetry/TelemetryClient.ts
370
+
371
+
372
+
373
+ var TELEMETRY_DIR = _chunkE26KKI46cjs.AUTOHAND_PATHS.telemetry;
374
+ var QUEUE_FILE = _chunkE26KKI46cjs.AUTOHAND_FILES.telemetryQueue;
375
+ var DEVICE_ID_FILE2 = _chunkE26KKI46cjs.AUTOHAND_FILES.deviceId;
376
+ var TelemetryClient = (_class2 = class {
377
+
378
+ __init2() {this.queue = []}
379
+
380
+ __init3() {this.flushTimer = null}
381
+ __init4() {this.isFlushing = false}
382
+ constructor(config = {}) {;_class2.prototype.__init2.call(this);_class2.prototype.__init3.call(this);_class2.prototype.__init4.call(this);
383
+ this.config = {
384
+ enabled: false,
385
+ apiBaseUrl: "https://api.autohand.ai",
386
+ batchSize: 20,
387
+ flushIntervalMs: 6e4,
388
+ // 1 minute
389
+ maxQueueSize: 500,
390
+ maxRetries: 3,
391
+ enableSessionSync: false,
392
+ companySecret: "",
393
+ clientType: "cli",
394
+ clientVersion: void 0,
395
+ ...config
396
+ };
397
+ this.deviceId = this.getOrCreateDeviceId();
398
+ this.loadQueue();
399
+ this.startFlushTimer();
400
+ }
401
+ /**
402
+ * Get or create a persistent device ID
403
+ */
404
+ getOrCreateDeviceId() {
405
+ try {
406
+ _fsextra2.default.ensureDirSync(_path2.default.dirname(DEVICE_ID_FILE2));
407
+ if (_fsextra2.default.existsSync(DEVICE_ID_FILE2)) {
408
+ return _fsextra2.default.readFileSync(DEVICE_ID_FILE2, "utf8").trim();
409
+ }
410
+ const id = _crypto2.default.randomUUID();
411
+ _fsextra2.default.writeFileSync(DEVICE_ID_FILE2, id);
412
+ return id;
413
+ } catch (e3) {
414
+ return _crypto2.default.randomUUID();
415
+ }
416
+ }
417
+ /**
418
+ * Load queued events from disk (for offline support)
419
+ */
420
+ loadQueue() {
421
+ try {
422
+ _fsextra2.default.ensureDirSync(TELEMETRY_DIR);
423
+ if (_fsextra2.default.existsSync(QUEUE_FILE)) {
424
+ const data = _fsextra2.default.readFileSync(QUEUE_FILE, "utf8");
425
+ this.queue = JSON.parse(data);
426
+ }
427
+ } catch (e4) {
428
+ this.queue = [];
429
+ }
430
+ }
431
+ /**
432
+ * Persist queue to disk for offline support
433
+ */
434
+ saveQueue() {
435
+ try {
436
+ _fsextra2.default.ensureDirSync(TELEMETRY_DIR);
437
+ _fsextra2.default.writeFileSync(QUEUE_FILE, JSON.stringify(this.queue, null, 2));
438
+ } catch (e5) {
439
+ }
440
+ }
441
+ /**
442
+ * Start periodic flush timer
443
+ */
444
+ startFlushTimer() {
445
+ if (this.flushTimer) {
446
+ clearInterval(this.flushTimer);
447
+ }
448
+ this.flushTimer = setInterval(() => {
449
+ this.flush().catch(() => {
450
+ });
451
+ }, this.config.flushIntervalMs);
452
+ }
453
+ /**
454
+ * Stop flush timer
455
+ */
456
+ stopFlushTimer() {
457
+ if (this.flushTimer) {
458
+ clearInterval(this.flushTimer);
459
+ this.flushTimer = null;
460
+ }
461
+ }
462
+ /**
463
+ * Get device ID
464
+ */
465
+ getDeviceId() {
466
+ return this.deviceId;
467
+ }
468
+ /**
469
+ * Check if online
470
+ */
471
+ async isOnline() {
472
+ try {
473
+ const controller = new AbortController();
474
+ const timeout = setTimeout(() => controller.abort(), 3e3);
475
+ const response = await fetch(`${this.config.apiBaseUrl}/health`, {
476
+ method: "GET",
477
+ signal: controller.signal
478
+ });
479
+ clearTimeout(timeout);
480
+ return response.ok;
481
+ } catch (e6) {
482
+ return false;
483
+ }
484
+ }
485
+ /**
486
+ * Queue an event for sending
487
+ */
488
+ async track(event) {
489
+ if (!this.config.enabled) return;
490
+ const fullEvent = {
491
+ ...event,
492
+ id: _crypto2.default.randomUUID(),
493
+ deviceId: this.deviceId,
494
+ clientType: this.config.clientType,
495
+ clientVersion: this.config.clientVersion,
496
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
497
+ };
498
+ this.queue.push(fullEvent);
499
+ if (this.queue.length > this.config.maxQueueSize) {
500
+ this.queue = this.queue.slice(-this.config.maxQueueSize);
501
+ }
502
+ this.saveQueue();
503
+ if (this.queue.length >= this.config.batchSize) {
504
+ await this.flush();
505
+ }
506
+ }
507
+ /**
508
+ * Flush queued events to the server
509
+ */
510
+ async flush() {
511
+ if (!this.config.enabled || this.isFlushing || this.queue.length === 0) {
512
+ return { sent: 0, failed: 0, queued: this.queue.length };
513
+ }
514
+ const online = await this.isOnline();
515
+ if (!online) {
516
+ return { sent: 0, failed: 0, queued: this.queue.length };
517
+ }
518
+ this.isFlushing = true;
519
+ try {
520
+ const eventsToSend = this.queue.slice(0, this.config.batchSize);
521
+ let sent = 0;
522
+ let failed = 0;
523
+ for (let attempt = 0; attempt < this.config.maxRetries; attempt++) {
524
+ try {
525
+ const authToken = `${this.deviceId}.${this.config.companySecret}`;
526
+ const response = await fetch(`${this.config.apiBaseUrl}/v1/telemetry`, {
527
+ method: "POST",
528
+ headers: {
529
+ "Content-Type": "application/json",
530
+ "Authorization": `Bearer ${authToken}`,
531
+ "X-CLI-Version": _optionalChain([eventsToSend, 'access', _11 => _11[0], 'optionalAccess', _12 => _12.cliVersion]) || "unknown"
532
+ },
533
+ body: JSON.stringify({ events: eventsToSend })
534
+ });
535
+ if (response.ok) {
536
+ this.queue = this.queue.slice(eventsToSend.length);
537
+ sent = eventsToSend.length;
538
+ this.saveQueue();
539
+ break;
540
+ } else {
541
+ failed = eventsToSend.length;
542
+ }
543
+ } catch (e7) {
544
+ failed = eventsToSend.length;
545
+ await new Promise((resolve) => setTimeout(resolve, 1e3 * (attempt + 1)));
546
+ }
547
+ }
548
+ return { sent, failed, queued: this.queue.length };
549
+ } finally {
550
+ this.isFlushing = false;
551
+ }
552
+ }
553
+ /**
554
+ * Force sync all queued events (called on graceful shutdown)
555
+ */
556
+ async syncAll() {
557
+ if (!this.config.enabled || this.queue.length === 0) {
558
+ return { sent: 0, failed: 0 };
559
+ }
560
+ const online = await this.isOnline();
561
+ if (!online) {
562
+ this.saveQueue();
563
+ return { sent: 0, failed: this.queue.length };
564
+ }
565
+ let totalSent = 0;
566
+ let totalFailed = 0;
567
+ while (this.queue.length > 0) {
568
+ const result = await this.flush();
569
+ totalSent += result.sent;
570
+ if (result.sent === 0) {
571
+ totalFailed += result.queued;
572
+ break;
573
+ }
574
+ }
575
+ return { sent: totalSent, failed: totalFailed };
576
+ }
577
+ /**
578
+ * Upload session data for cloud sync
579
+ */
580
+ async uploadSession(sessionData) {
581
+ if (!this.config.enabled || !this.config.enableSessionSync) {
582
+ return { success: false, error: "Session sync disabled" };
583
+ }
584
+ const online = await this.isOnline();
585
+ if (!online) {
586
+ try {
587
+ const syncQueueFile = _path2.default.join(TELEMETRY_DIR, "session-sync-queue.json");
588
+ let syncQueue = [];
589
+ if (_fsextra2.default.existsSync(syncQueueFile)) {
590
+ syncQueue = JSON.parse(_fsextra2.default.readFileSync(syncQueueFile, "utf8"));
591
+ }
592
+ syncQueue.push(sessionData);
593
+ if (syncQueue.length > 10) {
594
+ syncQueue = syncQueue.slice(-10);
595
+ }
596
+ _fsextra2.default.writeFileSync(syncQueueFile, JSON.stringify(syncQueue, null, 2));
597
+ return { success: false, error: "Offline - queued for sync" };
598
+ } catch (e8) {
599
+ return { success: false, error: "Failed to queue session" };
600
+ }
601
+ }
602
+ try {
603
+ const authToken = `${this.deviceId}.${this.config.companySecret}`;
604
+ const response = await fetch(`${this.config.apiBaseUrl}/v1/history`, {
605
+ method: "POST",
606
+ headers: {
607
+ "Content-Type": "application/json",
608
+ "Authorization": `Bearer ${authToken}`
609
+ },
610
+ body: JSON.stringify({
611
+ deviceId: this.deviceId,
612
+ sessionId: sessionData.sessionId,
613
+ messages: sessionData.messages,
614
+ metadata: sessionData.metadata
615
+ })
616
+ });
617
+ if (response.ok) {
618
+ const data = await response.json();
619
+ return { success: true, id: data.id };
620
+ } else {
621
+ return { success: false, error: `HTTP ${response.status}` };
622
+ }
623
+ } catch (err) {
624
+ return { success: false, error: String(err) };
625
+ }
626
+ }
627
+ /**
628
+ * Sync queued sessions (call when back online)
629
+ */
630
+ async syncQueuedSessions() {
631
+ const syncQueueFile = _path2.default.join(TELEMETRY_DIR, "session-sync-queue.json");
632
+ if (!_fsextra2.default.existsSync(syncQueueFile)) {
633
+ return { synced: 0, failed: 0 };
634
+ }
635
+ try {
636
+ const syncQueue = JSON.parse(_fsextra2.default.readFileSync(syncQueueFile, "utf8"));
637
+ let synced = 0;
638
+ let failed = 0;
639
+ const remaining = [];
640
+ for (const session of syncQueue) {
641
+ const result = await this.uploadSession(session);
642
+ if (result.success) {
643
+ synced++;
644
+ } else if (result.error !== "Offline - queued for sync") {
645
+ failed++;
646
+ } else {
647
+ remaining.push(session);
648
+ }
649
+ }
650
+ if (remaining.length > 0) {
651
+ _fsextra2.default.writeFileSync(syncQueueFile, JSON.stringify(remaining, null, 2));
652
+ } else {
653
+ _fsextra2.default.removeSync(syncQueueFile);
654
+ }
655
+ return { synced, failed };
656
+ } catch (e9) {
657
+ return { synced: 0, failed: 0 };
658
+ }
659
+ }
660
+ /**
661
+ * Get queue stats
662
+ */
663
+ getStats() {
664
+ return {
665
+ queued: this.queue.length,
666
+ deviceId: this.deviceId
667
+ };
668
+ }
669
+ /**
670
+ * Disable telemetry
671
+ */
672
+ disable() {
673
+ this.config.enabled = false;
674
+ this.stopFlushTimer();
675
+ }
676
+ /**
677
+ * Enable telemetry
678
+ */
679
+ enable() {
680
+ this.config.enabled = true;
681
+ this.startFlushTimer();
682
+ }
683
+ }, _class2);
684
+
685
+ // src/telemetry/TelemetryManager.ts
686
+
687
+ var TelemetryManager = (_class3 = class {
688
+
689
+ __init5() {this.sessionId = null}
690
+ __init6() {this.sessionStartTime = null}
691
+ __init7() {this.interactionCount = 0}
692
+ __init8() {this.toolsUsed = /* @__PURE__ */ new Set()}
693
+ __init9() {this.errorsCount = 0}
694
+ __init10() {this.currentModel = null}
695
+ __init11() {this.currentProvider = null}
696
+ constructor(config = {}) {;_class3.prototype.__init5.call(this);_class3.prototype.__init6.call(this);_class3.prototype.__init7.call(this);_class3.prototype.__init8.call(this);_class3.prototype.__init9.call(this);_class3.prototype.__init10.call(this);_class3.prototype.__init11.call(this);
697
+ this.client = new TelemetryClient(config);
698
+ }
699
+ /**
700
+ * Get system info for events
701
+ */
702
+ getSystemInfo() {
703
+ return {
704
+ cliVersion: _chunkREMGR23Vcjs.package_default.version,
705
+ platform: process.platform,
706
+ osVersion: _os2.default.release(),
707
+ nodeVersion: process.version,
708
+ cpuArch: process.arch,
709
+ cpuCores: _os2.default.cpus().length,
710
+ memoryTotal: Math.round(_os2.default.totalmem() / 1024 / 1024),
711
+ // MB
712
+ memoryFree: Math.round(_os2.default.freemem() / 1024 / 1024)
713
+ // MB
714
+ };
715
+ }
716
+ /**
717
+ * Track a generic event
718
+ */
719
+ async trackEvent(eventType, eventData) {
720
+ await this.client.track({
721
+ eventType,
722
+ eventData,
723
+ sessionId: this.sessionId || "unknown",
724
+ ...this.getSystemInfo(),
725
+ interactionCount: this.interactionCount,
726
+ toolsUsed: Array.from(this.toolsUsed),
727
+ errorsCount: this.errorsCount
728
+ });
729
+ }
730
+ /**
731
+ * Start a new session
732
+ */
733
+ async startSession(sessionId, model, provider) {
734
+ this.sessionId = sessionId;
735
+ this.sessionStartTime = /* @__PURE__ */ new Date();
736
+ this.interactionCount = 0;
737
+ this.toolsUsed.clear();
738
+ this.errorsCount = 0;
739
+ this.currentModel = model || null;
740
+ this.currentProvider = provider || null;
741
+ await this.trackEvent("session_start", {
742
+ model,
743
+ provider
744
+ });
745
+ await this.client.syncQueuedSessions();
746
+ }
747
+ /**
748
+ * End current session
749
+ */
750
+ async endSession(status = "completed") {
751
+ const duration = this.sessionStartTime ? Math.round((Date.now() - this.sessionStartTime.getTime()) / 1e3) : 0;
752
+ await this.trackEvent("session_end", {
753
+ status,
754
+ duration,
755
+ model: this.currentModel,
756
+ provider: this.currentProvider
757
+ });
758
+ await this.client.syncAll();
759
+ }
760
+ /**
761
+ * Track tool usage
762
+ */
763
+ async trackToolUse(data) {
764
+ this.toolsUsed.add(data.tool);
765
+ if (!data.success) {
766
+ this.errorsCount++;
767
+ }
768
+ await this.trackEvent("tool_use", {
769
+ tool: data.tool,
770
+ success: data.success,
771
+ duration: data.duration,
772
+ error: data.error
773
+ });
774
+ }
775
+ /**
776
+ * Track an error
777
+ */
778
+ async trackError(data) {
779
+ this.errorsCount++;
780
+ const sanitizedStack = _optionalChain([data, 'access', _13 => _13.stack, 'optionalAccess', _14 => _14.replace, 'call', _15 => _15(/\/Users\/[^/]+/g, "/Users/***"), 'access', _16 => _16.replace, 'call', _17 => _17(/\/home\/[^/]+/g, "/home/***"), 'access', _18 => _18.replace, 'call', _19 => _19(/C:\\Users\\[^\\]+/g, "C:\\Users\\***")]);
781
+ await this.trackEvent("error", {
782
+ type: data.type,
783
+ message: data.message,
784
+ stack: sanitizedStack,
785
+ context: data.context
786
+ });
787
+ }
788
+ /**
789
+ * Track a session failure as a bug report with detailed context.
790
+ * Prefixes the error type with "BUG:" for easy identification.
791
+ */
792
+ async trackSessionFailureBug(data) {
793
+ this.errorsCount++;
794
+ const sanitizedStack = _optionalChain([data, 'access', _20 => _20.error, 'access', _21 => _21.stack, 'optionalAccess', _22 => _22.replace, 'call', _23 => _23(/\/Users\/[^/]+/g, "/Users/***"), 'access', _24 => _24.replace, 'call', _25 => _25(/\/home\/[^/]+/g, "/home/***"), 'access', _26 => _26.replace, 'call', _27 => _27(/C:\\Users\\[^\\]+/g, "C:\\Users\\***")]);
795
+ const bugData = {
796
+ type: "BUG:session_failure",
797
+ errorMessage: data.error.message,
798
+ errorName: data.error.name,
799
+ stack: sanitizedStack,
800
+ retryAttempt: data.retryAttempt,
801
+ maxRetries: data.maxRetries,
802
+ conversationLength: data.conversationLength,
803
+ lastToolCalls: data.lastToolCalls,
804
+ iterationCount: data.iterationCount,
805
+ contextUsage: data.contextUsage,
806
+ model: data.model || this.currentModel || void 0,
807
+ provider: data.provider || this.currentProvider || void 0,
808
+ isRetrying: data.retryAttempt < data.maxRetries
809
+ };
810
+ await this.trackEvent("session_failure_bug", bugData);
811
+ }
812
+ /**
813
+ * Track slash command usage
814
+ */
815
+ async trackCommand(data) {
816
+ this.interactionCount++;
817
+ await this.trackEvent("command_use", {
818
+ command: data.command,
819
+ args: data.args
820
+ });
821
+ }
822
+ /**
823
+ * Track skill activation/usage
824
+ */
825
+ async trackSkillUse(data) {
826
+ await this.trackEvent("skill_use", {
827
+ skillName: data.skillName,
828
+ source: data.source,
829
+ activationType: data.activationType,
830
+ action: data.action
831
+ });
832
+ }
833
+ /**
834
+ * Track model switch
835
+ */
836
+ async trackModelSwitch(data) {
837
+ const previousModel = this.currentModel;
838
+ this.currentModel = data.toModel;
839
+ this.currentProvider = data.provider;
840
+ await this.trackEvent("model_switch", {
841
+ fromModel: previousModel || data.fromModel,
842
+ toModel: data.toModel,
843
+ provider: data.provider
844
+ });
845
+ }
846
+ /**
847
+ * Track heartbeat (periodic check-in)
848
+ */
849
+ async trackHeartbeat() {
850
+ await this.trackEvent("heartbeat", {
851
+ uptime: this.sessionStartTime ? Math.round((Date.now() - this.sessionStartTime.getTime()) / 1e3) : 0
852
+ });
853
+ }
854
+ /**
855
+ * Record an interaction (user message)
856
+ */
857
+ recordInteraction() {
858
+ this.interactionCount++;
859
+ }
860
+ /**
861
+ * Upload session for cloud sync
862
+ */
863
+ async syncSession(data) {
864
+ if (!this.sessionId) {
865
+ return { success: false, error: "No active session" };
866
+ }
867
+ return this.client.uploadSession({
868
+ sessionId: this.sessionId,
869
+ messages: data.messages,
870
+ metadata: {
871
+ model: this.currentModel || void 0,
872
+ provider: this.currentProvider || void 0,
873
+ totalTokens: _optionalChain([data, 'access', _28 => _28.metadata, 'optionalAccess', _29 => _29.totalTokens]),
874
+ startTime: _optionalChain([this, 'access', _30 => _30.sessionStartTime, 'optionalAccess', _31 => _31.toISOString, 'call', _32 => _32()]),
875
+ endTime: (/* @__PURE__ */ new Date()).toISOString(),
876
+ workspaceRoot: _optionalChain([data, 'access', _33 => _33.metadata, 'optionalAccess', _34 => _34.workspaceRoot])
877
+ }
878
+ });
879
+ }
880
+ /**
881
+ * Get current session ID
882
+ */
883
+ getSessionId() {
884
+ return this.sessionId;
885
+ }
886
+ /**
887
+ * Get device ID
888
+ */
889
+ getDeviceId() {
890
+ return this.client.getDeviceId();
891
+ }
892
+ /**
893
+ * Get stats
894
+ */
895
+ getStats() {
896
+ return {
897
+ ...this.client.getStats(),
898
+ sessionId: this.sessionId,
899
+ interactionCount: this.interactionCount,
900
+ toolsUsed: Array.from(this.toolsUsed),
901
+ errorsCount: this.errorsCount,
902
+ sessionDuration: this.sessionStartTime ? Math.round((Date.now() - this.sessionStartTime.getTime()) / 1e3) : 0
903
+ };
904
+ }
905
+ /**
906
+ * Flush pending events
907
+ */
908
+ async flush() {
909
+ return this.client.flush();
910
+ }
911
+ /**
912
+ * Disable telemetry
913
+ */
914
+ disable() {
915
+ this.client.disable();
916
+ }
917
+ /**
918
+ * Enable telemetry
919
+ */
920
+ enable() {
921
+ this.client.enable();
922
+ }
923
+ /**
924
+ * Stop and cleanup
925
+ */
926
+ async shutdown() {
927
+ this.client.stopFlushTimer();
928
+ await this.client.syncAll();
929
+ }
930
+ }, _class3);
931
+
932
+
933
+
934
+
935
+
936
+
937
+
938
+
939
+
940
+
941
+
942
+
943
+
944
+
945
+
946
+
947
+
948
+
949
+
950
+
951
+
952
+
953
+ exports.isAutohandDebugEnabled = isAutohandDebugEnabled; exports.writeAutohandDebugLine = writeAutohandDebugLine; exports.AutoReportManager = AutoReportManager; exports.TelemetryManager = TelemetryManager; exports.isSessionWorktreeEnabled = isSessionWorktreeEnabled; exports.prepareSessionWorktree = prepareSessionWorktree; exports.formatStartupBanner = formatStartupBanner; exports.formatWelcomeVersionPrefix = formatWelcomeVersionPrefix; exports.formatUpdateAvailable = formatUpdateAvailable; exports.formatUpdateReady = formatUpdateReady; exports.formatInstallHint = formatInstallHint; exports.formatWelcomeGreeting = formatWelcomeGreeting; exports.formatWelcomeStatusLine = formatWelcomeStatusLine; exports.formatWelcomeTitle = formatWelcomeTitle; exports.formatWelcomeSuggestion = formatWelcomeSuggestion; exports.formatSessionEnding = formatSessionEnding; exports.formatSessionSaved = formatSessionSaved; exports.formatResumeHint = formatResumeHint; exports.formatExitCleanup = formatExitCleanup; exports.formatForceExit = formatForceExit;
954
+ /**
955
+ * @license
956
+ * Copyright 2025 Autohand AI LLC
957
+ * SPDX-License-Identifier: Apache-2.0
958
+ */
959
+ /**
960
+ * @license
961
+ * Copyright 2026 Autohand AI LLC
962
+ * SPDX-License-Identifier: Apache-2.0
963
+ */
964
+ /**
965
+ * @license
966
+ * Copyright 2025 Autohand AI LLC
967
+ * SPDX-License-Identifier: Apache-2.0
968
+ *
969
+ * AutoReportClient - Low-level HTTP client for error reporting
970
+ * Sends sanitized error reports to the Autohand API for automatic GitHub issue creation
971
+ */
972
+ /**
973
+ * @license
974
+ * Copyright 2025 Autohand AI LLC
975
+ * SPDX-License-Identifier: Apache-2.0
976
+ *
977
+ * AutoReportManager - High-level manager for automatic error reporting
978
+ * Handles deduplication, retries, and config-based enable/disable
979
+ */
980
+ /**
981
+ * TelemetryClient - Low-level API client with offline batching
982
+ * @license Apache-2.0
983
+ */
984
+ /**
985
+ * TelemetryManager - High-level telemetry tracking
986
+ * @license Apache-2.0
987
+ */