autohand-cli 0.8.3 → 0.9.1

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 (546) hide show
  1. package/README.md +191 -74
  2. package/dist/{AgentRegistry-ODDXPAFR.js → AgentRegistry-GOV7FN2O.js} +2 -2
  3. package/dist/AgentRegistry-J2C6JBZ3.cjs +10 -0
  4. package/dist/{AutomodeManager-EOVHGRPP.js → AutomodeManager-APLLPEYJ.js} +31 -17
  5. package/dist/{AutomodeManager-6ATBE7Q5.cjs → AutomodeManager-MPSXT2RH.cjs} +38 -24
  6. package/dist/CommunitySkillsCache-22BB3J6H.cjs +8 -0
  7. package/dist/{CommunitySkillsCache-QLE57BN5.js → CommunitySkillsCache-ZACDPD4J.js} +2 -2
  8. package/dist/GitHubRegistryFetcher-CYJLF2XL.cjs +7 -0
  9. package/dist/{GitHubRegistryFetcher-NT5GFZXS.js → GitHubRegistryFetcher-J2BWPXJF.js} +1 -1
  10. package/dist/{HookManager-B2F35M27.js → HookManager-2S6AHOC3.js} +1 -1
  11. package/dist/{HookManager-PFAFE3FK.cjs → HookManager-TVEQI5ZU.cjs} +2 -2
  12. package/dist/{ImportWizard-OHRKBANZ.js → ImportWizard-AEBMAKXE.js} +33 -9
  13. package/dist/{ImportWizard-CJRZPPHL.cjs → ImportWizard-AF2XL6DS.cjs} +37 -13
  14. package/dist/LearnAdvisor-KKEQ5QCV.js +9 -0
  15. package/dist/LearnAdvisor-Q7RAYLPF.cjs +9 -0
  16. package/dist/{McpClientManager-NQ3EW2IF.cjs → McpClientManager-BNSKLHIN.cjs} +2 -2
  17. package/dist/{McpClientManager-VBIMGKXU.js → McpClientManager-SL35BR24.js} +1 -1
  18. package/dist/MemoryManager-PMNAEZMB.cjs +8 -0
  19. package/dist/{MemoryManager-2LAT7IHS.js → MemoryManager-QZRLTUB5.js} +2 -2
  20. package/dist/NVIDIAProvider-C3FWQOBZ.cjs +14 -0
  21. package/dist/NVIDIAProvider-SJPY3ONR.js +14 -0
  22. package/dist/{PermissionManager-7NQHRCHY.js → PermissionManager-MT7KBNNR.js} +3 -3
  23. package/dist/PermissionManager-URCNP5EC.cjs +11 -0
  24. package/dist/{ProjectProfiler-UG42W6WD.cjs → ProjectProfiler-CDAE7ECW.cjs} +1 -0
  25. package/dist/{ProjectProfiler-P4QJQWWA.js → ProjectProfiler-NZTJDRHD.js} +1 -0
  26. package/dist/ProviderFactory-56N3ECE4.cjs +12 -0
  27. package/dist/{ProviderFactory-2IYJ5OPW.js → ProviderFactory-RB4RVAF6.js} +4 -1
  28. package/dist/SessionManager-2IZGWASQ.cjs +10 -0
  29. package/dist/{SessionManager-4U4JFQ3C.js → SessionManager-554PHVPC.js} +2 -2
  30. package/dist/SkillsRegistry-GMRVONOQ.cjs +9 -0
  31. package/dist/{SkillsRegistry-RFEINXRT.js → SkillsRegistry-NHHMIUYJ.js} +2 -2
  32. package/dist/SubAgent-4GOR2FIJ.js +13 -0
  33. package/dist/SubAgent-ZJMDH4FI.cjs +13 -0
  34. package/dist/{SyncApiClient-B5RT2ECG.js → SyncApiClient-G3FM65IV.js} +1 -1
  35. package/dist/SyncApiClient-ODBDECOG.cjs +11 -0
  36. package/dist/about-3USFSGOH.js +15 -0
  37. package/dist/about-QR52U5DD.cjs +15 -0
  38. package/dist/acp-5Y2W6OZP.js +1556 -0
  39. package/dist/acp-GSYE75OB.cjs +1556 -0
  40. package/dist/actionExecutor-KHUU3Z3Q.cjs +28 -0
  41. package/dist/actionExecutor-PLQJZLZV.js +28 -0
  42. package/dist/add-dir-BTAD5OZS.cjs +11 -0
  43. package/dist/{add-dir-TUJM3PG5.js → add-dir-HCERJDBR.js} +3 -2
  44. package/dist/agent-B3EVT7NN.cjs +126 -0
  45. package/dist/agent-SATQ3WZ3.js +126 -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-44CRJGM7.cjs +18 -0
  53. package/dist/agents-NN4ZAJ7R.js +18 -0
  54. package/dist/agents-new-6D6G4QS6.cjs +17 -0
  55. package/dist/agents-new-7GAQ25EK.js +17 -0
  56. package/dist/{autoSkill-LQEVQFIH.js → autoSkill-66PKCYTW.js} +2 -2
  57. package/dist/autoSkill-VQLGBELN.cjs +20 -0
  58. package/dist/automode-45DWV4TN.cjs +10 -0
  59. package/dist/{automode-R6P3VHLS.js → automode-BUF3VGXU.js} +2 -2
  60. package/dist/browserToolBridge-BXRQB4B4.cjs +58 -0
  61. package/dist/browserToolBridge-F5N66PE7.js +58 -0
  62. package/dist/chrome-Q2U73HZB.cjs +50 -0
  63. package/dist/chrome-Q54OALOK.cjs +21 -0
  64. package/dist/chrome-Y3T7EIHG.js +50 -0
  65. package/dist/chrome-ZNJ46OYW.js +21 -0
  66. package/dist/chromeSkill-53TH55PM.js +105 -0
  67. package/dist/chromeSkill-THW7N4IY.cjs +105 -0
  68. package/dist/{chunk-HXGBSJL5.cjs → chunk-22SCR3EV.cjs} +2 -2
  69. package/dist/chunk-26G7YGOW.js +367 -0
  70. package/dist/{chunk-3L53OA4E.cjs → chunk-2ESQR35E.cjs} +10 -10
  71. package/dist/chunk-2H5O745H.js +63 -0
  72. package/dist/{chunk-ULDM2SNB.js → chunk-2IW5YFJ4.js} +48 -47
  73. package/dist/{chunk-U55TWFJI.cjs → chunk-2VHB43IX.cjs} +24 -6
  74. package/dist/chunk-3EDDDZS2.cjs +5 -0
  75. package/dist/{chunk-X5VSP65C.cjs → chunk-3ICORF7M.cjs} +4 -4
  76. package/dist/chunk-3OF56EMA.cjs +197 -0
  77. package/dist/chunk-3UC6DMFI.cjs +93 -0
  78. package/dist/{chunk-64H4FRM3.cjs → chunk-3UHRCHKB.cjs} +32 -34
  79. package/dist/{chunk-JCLYQ2JC.js → chunk-3ZOOH44N.js} +12 -6
  80. package/dist/{chunk-TUD3Z3BD.js → chunk-44ZWOBTI.js} +136 -55
  81. package/dist/chunk-4567QNRB.js +444 -0
  82. package/dist/chunk-45CHNQM6.cjs +517 -0
  83. package/dist/chunk-46MTALKD.js +44 -0
  84. package/dist/{chunk-WHE2SWHU.js → chunk-4E7SHPNQ.js} +2 -2
  85. package/dist/chunk-4LMUDS2K.js +124 -0
  86. package/dist/{chunk-W7RYQJLO.cjs → chunk-4XFHP2SN.cjs} +46 -15
  87. package/dist/chunk-4XVLNOFA.js +360 -0
  88. package/dist/{chunk-GBHDROGL.js → chunk-575PXZX7.js} +16 -4
  89. package/dist/chunk-5A7ZL64N.js +139 -0
  90. package/dist/chunk-5GCQ5UMV.cjs +85 -0
  91. package/dist/chunk-5JTTM5SC.js +59 -0
  92. package/dist/{chunk-IETRBBMP.cjs → chunk-5K3CDSWZ.cjs} +108 -31
  93. package/dist/{chunk-KLWJIPU2.cjs → chunk-5SFV2NCY.cjs} +20 -16
  94. package/dist/chunk-5ZNYX4VH.cjs +71 -0
  95. package/dist/{chunk-A4IJHHV7.cjs → chunk-63ANVAOJ.cjs} +52 -11
  96. package/dist/{chunk-MYISNQH4.js → chunk-65LRPW5W.js} +1 -1
  97. package/dist/chunk-6AYJCDTA.js +360 -0
  98. package/dist/{chunk-X2MSVKDV.js → chunk-6HF6XSCC.js} +2 -2
  99. package/dist/{chunk-AEJH23FO.cjs → chunk-6JWCGQJU.cjs} +6 -6
  100. package/dist/chunk-6OECOAK5.cjs +360 -0
  101. package/dist/chunk-6R25D2H5.js +121 -0
  102. package/dist/chunk-7DJJGKM6.js +77 -0
  103. package/dist/{chunk-VG34MG2U.js → chunk-7IRQ7JEH.js} +9 -6
  104. package/dist/chunk-7MY4JHER.js +27 -0
  105. package/dist/chunk-7PJKTSRN.js +152 -0
  106. package/dist/{chunk-SKYG33B2.cjs → chunk-7PT646AL.cjs} +3 -3
  107. package/dist/chunk-7WAUCLLQ.js +229 -0
  108. package/dist/{chunk-U46VYPLR.cjs → chunk-7XTUL7ZD.cjs} +9 -9
  109. package/dist/chunk-AE2ILW25.cjs +152 -0
  110. package/dist/{chunk-T2M64VHA.cjs → chunk-AOKXYGBQ.cjs} +61 -41
  111. package/dist/chunk-AQ5PVHOC.cjs +113 -0
  112. package/dist/{chunk-N2BLVUPM.cjs → chunk-AZ47LKD5.cjs} +3 -3
  113. package/dist/chunk-B4HSNOIH.cjs +354 -0
  114. package/dist/chunk-B76FJKEJ.cjs +184 -0
  115. package/dist/chunk-BP37FVBM.js +85 -0
  116. package/dist/chunk-BQU3HAE7.js +21 -0
  117. package/dist/chunk-BYE7RQFZ.cjs +121 -0
  118. package/dist/chunk-C46B72VK.js +1034 -0
  119. package/dist/{chunk-HIVRCQS2.js → chunk-C5QIQQ37.js} +56 -25
  120. package/dist/chunk-CCIDL4SA.js +19931 -0
  121. package/dist/{chunk-XVUHNWMX.js → chunk-CECH6QQP.js} +17 -19
  122. package/dist/chunk-CFAWTLSC.js +13 -0
  123. package/dist/{chunk-ZYQMLKOK.cjs → chunk-CK4HAHVY.cjs} +212 -70
  124. package/dist/chunk-CO2AADYU.cjs +360 -0
  125. package/dist/chunk-CRTCZ4WL.cjs +19931 -0
  126. package/dist/chunk-CSTUTDTH.js +75 -0
  127. package/dist/{chunk-K2C56QGS.cjs → chunk-D546G7DA.cjs} +1650 -479
  128. package/dist/{chunk-CNBKZEX5.cjs → chunk-DA7NBAJK.cjs} +49 -17
  129. package/dist/{chunk-G4CAKI3V.js → chunk-DGBPWODD.js} +7 -2
  130. package/dist/chunk-DHUQZ53B.cjs +29 -0
  131. package/dist/{chunk-RGR6ME5J.cjs → chunk-DI57A4BX.cjs} +25 -28
  132. package/dist/{chunk-5K6NGAVM.js → chunk-DNSD7DVJ.js} +67 -52
  133. package/dist/{chunk-RDF37HKB.cjs → chunk-DSSCERHI.cjs} +3 -2
  134. package/dist/{chunk-NAJ4IZKD.cjs → chunk-EA2MS25U.cjs} +8 -6
  135. package/dist/{chunk-SJAVBCOA.js → chunk-EEHWALXA.js} +94 -3
  136. package/dist/chunk-ES2HJQ4N.js +37 -0
  137. package/dist/{chunk-G27PQQFD.js → chunk-EYHKL4QC.js} +1 -1
  138. package/dist/{chunk-SV2WA57F.js → chunk-FBQJZKFX.js} +38 -15
  139. package/dist/chunk-FFBDRUO5.cjs +59 -0
  140. package/dist/{chunk-N7LI55V4.js → chunk-FFHSCM5M.js} +15 -8
  141. package/dist/{chunk-SAHBLB3E.js → chunk-FP46B4X3.js} +208 -3
  142. package/dist/chunk-FQVG6ZHF.js +197 -0
  143. package/dist/{chunk-J2GSFVUV.cjs → chunk-GAOPJ5S3.cjs} +74 -59
  144. package/dist/{chunk-S52YW5ZQ.js → chunk-GNBBIAMD.js} +16 -19
  145. package/dist/chunk-GSDV75A5.js +715 -0
  146. package/dist/chunk-GWY26SUD.cjs +63 -0
  147. package/dist/{chunk-TUAITHWL.js → chunk-H426KOGY.js} +2 -1
  148. package/dist/{chunk-EZMINVLU.js → chunk-H4D2Q2AL.js} +5 -2
  149. package/dist/chunk-HC2Q6A3E.cjs +4967 -0
  150. package/dist/{chunk-3WVJEL7K.cjs → chunk-HDK2EHVH.cjs} +3 -1
  151. package/dist/{chunk-5IXII4HX.cjs → chunk-HG3ZASBH.cjs} +23 -16
  152. package/dist/chunk-HK5A54AV.cjs +280 -0
  153. package/dist/{chunk-LQGVEP3E.js → chunk-HQUSEWT4.js} +45 -13
  154. package/dist/chunk-HSWWM6AM.js +2340 -0
  155. package/dist/chunk-HTU4W3GB.js +183 -0
  156. package/dist/{chunk-HLHTG5ZU.cjs → chunk-HVCIB4SW.cjs} +14 -12
  157. package/dist/chunk-HXHE2KAO.js +385 -0
  158. package/dist/{chunk-LJFUXC56.cjs → chunk-HXQREVTA.cjs} +9 -6
  159. package/dist/{chunk-SLQAYV3W.js → chunk-HZWU6IO3.js} +11 -2
  160. package/dist/chunk-I2ZK3AOD.js +866 -0
  161. package/dist/chunk-IEPLQ47J.js +719 -0
  162. package/dist/chunk-J5HE6CUM.cjs +124 -0
  163. package/dist/{chunk-LIEXWM2M.js → chunk-JAQO6XDB.js} +19 -1
  164. package/dist/chunk-JB3JCYBJ.js +113 -0
  165. package/dist/chunk-JCUHCH37.cjs +247 -0
  166. package/dist/{chunk-FPHU2ES6.cjs → chunk-JM3ZTQUK.cjs} +19 -9
  167. package/dist/{chunk-NDMIPTV4.js → chunk-JMJRFSNJ.js} +8 -3
  168. package/dist/{chunk-ZLSGXMGQ.js → chunk-JMN3GZU6.js} +2 -0
  169. package/dist/chunk-JPFRI4L4.js +4967 -0
  170. package/dist/{chunk-BVKXEQVG.cjs → chunk-JV5HVCHU.cjs} +22 -10
  171. package/dist/chunk-KA2U6MY2.js +388 -0
  172. package/dist/{chunk-SEKD5FH3.cjs → chunk-KASXKDF2.cjs} +8 -3
  173. package/dist/chunk-KJ26T7GM.cjs +367 -0
  174. package/dist/chunk-KM7R5YPS.cjs +385 -0
  175. package/dist/{chunk-MBBY4ZIK.js → chunk-KMP6Y3LJ.js} +4 -1
  176. package/dist/chunk-KWXGDSYT.js +184 -0
  177. package/dist/{chunk-C5IJIM2V.cjs → chunk-L46OUKW5.cjs} +68 -37
  178. package/dist/{chunk-6UJMCWRY.js → chunk-L6OH44HL.js} +19 -9
  179. package/dist/chunk-LANGD5CO.js +280 -0
  180. package/dist/{chunk-APIXPPMT.js → chunk-LEZEWKPA.js} +1004 -39
  181. package/dist/{chunk-ULQ6MDSJ.cjs → chunk-LFDPTJYF.cjs} +43 -35
  182. package/dist/chunk-LJD7KR3L.cjs +44 -0
  183. package/dist/{chunk-NCC6ETZS.js → chunk-LUMV3DB2.js} +41 -33
  184. package/dist/{chunk-QXH5RCFI.js → chunk-M5DK524Z.js} +2 -2
  185. package/dist/chunk-M7B7RRBK.cjs +1034 -0
  186. package/dist/chunk-MANJ67D3.js +3897 -0
  187. package/dist/{chunk-HPHJ73GU.cjs → chunk-MGNXABSU.cjs} +9 -9
  188. package/dist/{chunk-6ZCULLCA.js → chunk-MMKZSJUN.js} +1 -1
  189. package/dist/{chunk-DVUHHH3B.cjs → chunk-MQQH4XQH.cjs} +4 -4
  190. package/dist/chunk-MUNUUFU7.cjs +21 -0
  191. package/dist/{chunk-DVZOENQ7.cjs → chunk-MZN6JBRZ.cjs} +9 -4
  192. package/dist/{chunk-OOKY3HPZ.js → chunk-NB6M6ESM.js} +50 -9
  193. package/dist/{chunk-BYONM7UM.js → chunk-NBGOIFKP.js} +265 -18
  194. package/dist/chunk-NHWHEW7M.cjs +75 -0
  195. package/dist/chunk-NQZH5CR2.cjs +468 -0
  196. package/dist/{chunk-EGPXJERY.cjs → chunk-NV6LCD2I.cjs} +119 -28
  197. package/dist/chunk-NVATU4V6.cjs +44 -0
  198. package/dist/{chunk-YZXUDM5X.js → chunk-NZ3ZWLUW.js} +204 -62
  199. package/dist/chunk-NZ7GCK7Y.cjs +92 -0
  200. package/dist/{chunk-VEKDGU2Q.cjs → chunk-NZQFKXM3.cjs} +49 -25
  201. package/dist/chunk-O5GI6SR3.js +59 -0
  202. package/dist/{chunk-56SWIDEL.cjs → chunk-OCATAKXV.cjs} +57 -56
  203. package/dist/{chunk-SKV2F3NM.js → chunk-OIGYWOL6.js} +1 -1
  204. package/dist/{chunk-IFFXSTOM.cjs → chunk-ONVYXTUT.cjs} +3 -3
  205. package/dist/chunk-OR67YXQK.cjs +13 -0
  206. package/dist/chunk-OV3T5MUH.cjs +715 -0
  207. package/dist/{chunk-OHUZKDGX.js → chunk-P4FUTSVK.js} +3 -3
  208. package/dist/chunk-P6SLT2F4.cjs +139 -0
  209. package/dist/{chunk-TNZRZQ7Q.js → chunk-PB7W7R72.js} +3 -78
  210. package/dist/chunk-PCM3N3CL.cjs +37 -0
  211. package/dist/{chunk-2AA5MFES.js → chunk-PGFLPURU.js} +8 -5
  212. package/dist/{chunk-DJDE4DTT.cjs → chunk-PIXQ2AVM.cjs} +25 -19
  213. package/dist/chunk-PNIAIOMZ.cjs +229 -0
  214. package/dist/{chunk-HTLINWX6.cjs → chunk-PQBYFEBL.cjs} +16 -13
  215. package/dist/{chunk-22D2CNTP.cjs → chunk-PSAH4ZQB.cjs} +5 -2
  216. package/dist/{chunk-3VTAFAL2.js → chunk-PTTZI4QZ.js} +16 -12
  217. package/dist/{chunk-WPVWQSL7.cjs → chunk-PY73W5MQ.cjs} +16 -13
  218. package/dist/{chunk-EGMZDTSL.js → chunk-PZZMIYII.js} +10 -2
  219. package/dist/{chunk-HBZU3RBZ.js → chunk-Q3BS6FPM.js} +34 -10
  220. package/dist/chunk-QBYGMMDD.js +517 -0
  221. package/dist/chunk-QLZOMZO5.cjs +388 -0
  222. package/dist/{chunk-ADUFCS4Q.cjs → chunk-QQ64HEHP.cjs} +160 -79
  223. package/dist/{chunk-L3TWPROA.js → chunk-QRQF3556.js} +44 -24
  224. package/dist/{chunk-YHD6TUIR.cjs → chunk-QW2RW2GY.cjs} +2 -0
  225. package/dist/chunk-RAKO7UN7.js +114 -0
  226. package/dist/{chunk-7TQH3CL4.cjs → chunk-RBXBH6EB.cjs} +78 -35
  227. package/dist/chunk-RFUKZIJF.cjs +78 -0
  228. package/dist/chunk-RS2E32YB.js +71 -0
  229. package/dist/{chunk-OLSBBZW6.cjs → chunk-S5JNQIGL.cjs} +5 -5
  230. package/dist/{chunk-FTYY5JJD.js → chunk-S5QKRA2V.js} +2 -2
  231. package/dist/chunk-SD3NTC7D.cjs +77 -0
  232. package/dist/{chunk-KPELYZ6L.js → chunk-SDLY4X3G.js} +2 -2
  233. package/dist/{chunk-IDFF5J2E.js → chunk-SFFEKZGC.js} +38 -7
  234. package/dist/{chunk-EGFT4PGW.js → chunk-SHRLFX6F.js} +8 -3
  235. package/dist/{chunk-3WICOC33.js → chunk-SNDDZG5H.js} +124 -84
  236. package/dist/{chunk-CZXGCVTR.cjs → chunk-SOVR7S3T.cjs} +2 -2
  237. package/dist/chunk-SPQ7QIQ6.js +78 -0
  238. package/dist/{chunk-XRZEUWKF.js → chunk-SRMGWMQO.js} +1 -1
  239. package/dist/{chunk-R33VKSH5.cjs → chunk-SVVP4UUZ.cjs} +11 -11
  240. package/dist/{chunk-7BTSG4ME.cjs → chunk-SY2P3Z5W.cjs} +1004 -39
  241. package/dist/chunk-SZD45IDG.js +468 -0
  242. package/dist/{chunk-3O3MOK5C.cjs → chunk-TE4SYTWR.cjs} +1114 -142
  243. package/dist/chunk-TH26BQJG.js +101 -0
  244. package/dist/{chunk-QNGEW5TC.js → chunk-TR6NECEZ.js} +1 -1
  245. package/dist/{chunk-YGN4CQIP.js → chunk-TYBPTKFT.js} +1 -1
  246. package/dist/{chunk-GJH7XMSK.js → chunk-U2QUMKCB.js} +8 -6
  247. package/dist/{chunk-47CKWKEX.cjs → chunk-U6PLSPMD.cjs} +9 -4
  248. package/dist/chunk-UOQECODR.js +34 -0
  249. package/dist/chunk-UR27UDTB.js +354 -0
  250. package/dist/chunk-UWZ4G3SQ.js +93 -0
  251. package/dist/{chunk-Y72HH2TF.cjs → chunk-V3SZLWEQ.cjs} +33 -24
  252. package/dist/chunk-V4HGZSKQ.cjs +183 -0
  253. package/dist/{chunk-3PDTTAKJ.js → chunk-V5ELP2XE.js} +19 -12
  254. package/dist/{chunk-3K2ESU53.cjs → chunk-VKOXFT4L.cjs} +2 -2
  255. package/dist/{chunk-XTB6VJVQ.cjs → chunk-VLGGMQUN.cjs} +6 -6
  256. package/dist/chunk-VQHSYAPZ.cjs +3897 -0
  257. package/dist/chunk-VUGOOGHB.js +400 -0
  258. package/dist/chunk-W5QLA6WP.cjs +866 -0
  259. package/dist/chunk-WBU4Q4GS.cjs +400 -0
  260. package/dist/{chunk-KWXVKLQ5.cjs → chunk-WGNMOVMT.cjs} +7 -82
  261. package/dist/chunk-WJYFLQ7G.cjs +27 -0
  262. package/dist/{chunk-RKJTGGMU.cjs → chunk-WKRDBCP2.cjs} +221 -16
  263. package/dist/{chunk-ZSPXQYG2.js → chunk-WNJXIACY.js} +7 -5
  264. package/dist/{chunk-AYS2ASM7.js → chunk-WPE2XHVX.js} +1 -1
  265. package/dist/chunk-WTB7AFL6.cjs +101 -0
  266. package/dist/{chunk-JYTDYJVW.js → chunk-X3TI5TJJ.js} +1 -1
  267. package/dist/chunk-X5P6QQOB.cjs +719 -0
  268. package/dist/{chunk-245KJE5Y.cjs → chunk-X7XMITIL.cjs} +14 -6
  269. package/dist/chunk-XF2WIKHR.cjs +34 -0
  270. package/dist/{chunk-DV2ZHK7B.cjs → chunk-XNIMSVS6.cjs} +49 -26
  271. package/dist/chunk-XW3XCK4E.cjs +59 -0
  272. package/dist/{chunk-N23UAW4I.js → chunk-XZVDYC5U.js} +7 -2
  273. package/dist/chunk-Y5BDE24P.cjs +444 -0
  274. package/dist/{chunk-NAGQ2PDC.js → chunk-YC5OBZQU.js} +1604 -433
  275. package/dist/chunk-YISPVAXO.cjs +2340 -0
  276. package/dist/{chunk-KQGPTCQJ.js → chunk-YQDI753V.js} +68 -25
  277. package/dist/{chunk-UJ2JSM6H.js → chunk-YVQI26H4.js} +2 -0
  278. package/dist/{chunk-NNPAM4HC.cjs → chunk-YWH55BWK.cjs} +15 -6
  279. package/dist/{chunk-X2YOZQIP.cjs → chunk-YWTIXHU6.cjs} +266 -19
  280. package/dist/{chunk-XX2ZO7DS.js → chunk-YXM6SA7P.js} +25 -16
  281. package/dist/chunk-YZWE7XSM.js +5 -0
  282. package/dist/chunk-ZASDSY7P.cjs +114 -0
  283. package/dist/{chunk-2UC22DJU.js → chunk-ZNGRLCFQ.js} +30 -4
  284. package/dist/{chunk-KANW6OYC.cjs → chunk-ZNYZB7XY.cjs} +34 -8
  285. package/dist/{chunk-NA6WQDYW.js → chunk-ZPLCAXJW.js} +1088 -116
  286. package/dist/{chunk-7UOUW76C.js → chunk-ZQAT5VT5.js} +101 -24
  287. package/dist/chunk-ZUYYHKQA.js +44 -0
  288. package/dist/clear-QJXU25IF.cjs +12 -0
  289. package/dist/{clear-A3N4GK2S.js → clear-Y5TO3RZA.js} +3 -3
  290. package/dist/communityInstaller-LXMVKVAV.cjs +22 -0
  291. package/dist/{communityInstaller-LOP2EDH5.js → communityInstaller-RVL4STPS.js} +8 -5
  292. package/dist/completion-JX4T2ONW.cjs +17 -0
  293. package/dist/completion-SE3XYG74.js +17 -0
  294. package/dist/config-3224PRW4.cjs +21 -0
  295. package/dist/{config-HPJPKTO6.js → config-7KPHKFTP.js} +7 -4
  296. package/dist/{constants-LISJW3DD.js → constants-EJFAWJQI.js} +1 -1
  297. package/dist/constants-MCCGUU5F.cjs +21 -0
  298. package/dist/{defaultHooks-IHSJR2AX.cjs → defaultHooks-2V2CQL63.cjs} +25 -10
  299. package/dist/{defaultHooks-KUKHK3AG.js → defaultHooks-TMHDU3FS.js} +25 -10
  300. package/dist/export-BJVIDZC4.js +15 -0
  301. package/dist/export-KU4557HK.cjs +15 -0
  302. package/dist/feature-K3LG5IJP.cjs +14 -0
  303. package/dist/feature-V4JF5TNJ.js +14 -0
  304. package/dist/features-5OJTLKS7.js +23 -0
  305. package/dist/features-VCBJQXCX.cjs +23 -0
  306. package/dist/feedback-D4437VE4.js +18 -0
  307. package/dist/feedback-VZPEHGFY.cjs +18 -0
  308. package/dist/fffSearchProvider-2YCNKOYD.js +412 -0
  309. package/dist/fffSearchProvider-W6627E2V.cjs +412 -0
  310. package/dist/{filesystem-Z7BWAWMZ.js → filesystem-L6DQKGWK.js} +3 -2
  311. package/dist/filesystem-PGUPCMVK.cjs +11 -0
  312. package/dist/go-X4E6BCD6.js +12 -0
  313. package/dist/go-XREVFS5I.cjs +12 -0
  314. package/dist/goal-4M3J6JS2.cjs +16 -0
  315. package/dist/goal-EI66BV7W.js +16 -0
  316. package/dist/help-GGFS7WHY.cjs +12 -0
  317. package/dist/{help-GFQXNZOK.js → help-MLIROWKM.js} +2 -2
  318. package/dist/{history-E3N6BJP7.js → history-GQJ6RZD6.js} +2 -2
  319. package/dist/history-J4LUIOSI.cjs +14 -0
  320. package/dist/hooks-FSRIUS6A.cjs +18 -0
  321. package/dist/hooks-PPFHCF7T.js +18 -0
  322. package/dist/i18n-CI6VFXL5.cjs +33 -0
  323. package/dist/{i18n-SY7QRM22.js → i18n-Q7UZJRPL.js} +1 -1
  324. package/dist/ide-BUSVE54P.js +15 -0
  325. package/dist/ide-YR27BPGM.cjs +15 -0
  326. package/dist/immediateCommandRouter-MTEHZXQX.js +15 -0
  327. package/dist/immediateCommandRouter-ROXU3MWT.cjs +15 -0
  328. package/dist/{import-W7SVLSTC.js → import-3VBKI6BN.js} +3 -3
  329. package/dist/{import-ADI37ZUR.cjs → import-C7S6UJMW.cjs} +3 -3
  330. package/dist/import-DBK4OCDF.cjs +10 -0
  331. package/dist/{import-KGKKZ3B7.js → import-U47DXCA7.js} +2 -2
  332. package/dist/index.cjs +837 -23011
  333. package/dist/index.d.cts +95 -0
  334. package/dist/index.d.ts +95 -0
  335. package/dist/index.js +864 -23038
  336. package/dist/init-OXTYS72D.cjs +10 -0
  337. package/dist/{init-7MFK626E.js → init-Q2O4R42R.js} +2 -2
  338. package/dist/inkMode-VUE6ZDLD.cjs +7 -0
  339. package/dist/inkMode-WBNFOSAT.js +7 -0
  340. package/dist/inputPrompt-3CFZDUBH.js +90 -0
  341. package/dist/inputPrompt-JMACL4EB.cjs +90 -0
  342. package/dist/language-EK3M6UBV.cjs +22 -0
  343. package/dist/language-Q3RUGGOW.js +22 -0
  344. package/dist/learn-3DSX7DYG.cjs +23 -0
  345. package/dist/learn-OPOH5L43.js +23 -0
  346. package/dist/login-GST7MWXJ.cjs +27 -0
  347. package/dist/login-Q7DZKAX4.js +27 -0
  348. package/dist/logout-2G7OUK7I.cjs +24 -0
  349. package/dist/logout-FNBBL2UI.js +24 -0
  350. package/dist/mcp-AH3MMUBU.js +21 -0
  351. package/dist/mcp-DW7R63IB.cjs +21 -0
  352. package/dist/{mcp-install-2FEROZTL.js → mcp-install-222PCKSW.js} +18 -10
  353. package/dist/{mcp-install-WM6BQRI5.cjs → mcp-install-IA4ZS2SV.cjs} +22 -14
  354. package/dist/memory-6NX3DAIY.cjs +10 -0
  355. package/dist/{memory-J73WZH2I.js → memory-VB46T5H3.js} +2 -2
  356. package/dist/model-64NAELFS.cjs +10 -0
  357. package/dist/{model-AES267IN.js → model-SJJG64AM.js} +2 -2
  358. package/dist/new-DU5SOOOY.cjs +12 -0
  359. package/dist/{new-5CLF3MKH.js → new-ERZ5C6CN.js} +3 -3
  360. package/dist/onboarding-2U2BV2KE.cjs +36 -0
  361. package/dist/onboarding-ZQXMPSMJ.js +36 -0
  362. package/dist/permissions-7ACNFK7A.js +10 -0
  363. package/dist/permissions-GSNNV7RJ.cjs +10 -0
  364. package/dist/plan-XEJMOT55.cjs +13 -0
  365. package/dist/{plan-65HMS5HQ.js → plan-YYUAXPTL.js} +3 -1
  366. package/dist/pr-review-CW6J7P62.cjs +9 -0
  367. package/dist/pr-review-YZSBQVT2.js +9 -0
  368. package/dist/{quit-XDZYRSPU.js → quit-WY6T267G.js} +2 -2
  369. package/dist/quit-XIRE2KRE.cjs +10 -0
  370. package/dist/rawMode-6W5AXAKI.cjs +7 -0
  371. package/dist/rawMode-GFNLXQPU.js +7 -0
  372. package/dist/{registry-PTHWERKC.js → registry-4DXUDKJN.js} +29 -44
  373. package/dist/{registry-IVT4G2RT.cjs → registry-UEO3ETZ7.cjs} +65 -80
  374. package/dist/repeat-P4FAPE3Y.cjs +17 -0
  375. package/dist/{repeat-EVCWUL6Z.js → repeat-RALE6AUO.js} +7 -3
  376. package/dist/resume-RQZ3WXBP.cjs +17 -0
  377. package/dist/resume-XSXZMDMD.js +17 -0
  378. package/dist/review-QHP2KP4Q.js +9 -0
  379. package/dist/review-UWHWQHCB.cjs +9 -0
  380. package/dist/ripgrep-67SCU2BA.cjs +9 -0
  381. package/dist/ripgrep-VHJQQ55W.js +9 -0
  382. package/dist/rpc-XH7QLN4H.js +3874 -0
  383. package/dist/rpc-YF54T7JU.cjs +3874 -0
  384. package/dist/search-VXXFGZWU.cjs +21 -0
  385. package/dist/search-YAWGX7P7.js +21 -0
  386. package/dist/{sessions-6GWEBMKS.js → sessions-NJYHJOEL.js} +2 -2
  387. package/dist/sessions-OSG3UJEZ.cjs +10 -0
  388. package/dist/settings-SO2UIGWV.cjs +42 -0
  389. package/dist/settings-ZXUQH3DO.js +42 -0
  390. package/dist/setup-KG7EGKF5.js +30 -0
  391. package/dist/setup-RSOPCQ57.cjs +30 -0
  392. package/dist/share-WFAGZ5PY.js +17 -0
  393. package/dist/share-ZU3SGACF.cjs +17 -0
  394. package/dist/skills-KBVAQAD2.cjs +29 -0
  395. package/dist/skills-NBTNDVAY.js +29 -0
  396. package/dist/{skills-ZZCIAS7C.js → skills-OB6RDW7D.js} +10 -7
  397. package/dist/{skills-PG542VEB.cjs → skills-ZROBG3RZ.cjs} +13 -10
  398. package/dist/{skills-install-SRC3Z2MS.js → skills-install-BHTIEMKH.js} +21 -70
  399. package/dist/{skills-install-67DOBPJC.cjs → skills-install-ILX6QVEF.cjs} +34 -83
  400. package/dist/skills-new-B45VQ2PP.cjs +18 -0
  401. package/dist/skills-new-YMRP2HNO.js +18 -0
  402. package/dist/slashCommands-53VYIBJU.js +105 -0
  403. package/dist/slashCommands-BG2RGGZ6.cjs +105 -0
  404. package/dist/status-CQ2IUOVK.cjs +24 -0
  405. package/dist/status-E7IGNVPC.js +24 -0
  406. package/dist/summarizer-DGPHE5IQ.js +17 -0
  407. package/dist/summarizer-JNXLUAQG.cjs +17 -0
  408. package/dist/sync-7C25MOT2.js +22 -0
  409. package/dist/{sync-VU2NSJ4O.js → sync-OCJN4ZSO.js} +3 -3
  410. package/dist/sync-XRP46IVG.cjs +40 -0
  411. package/dist/sync-ZMFVE7T4.cjs +22 -0
  412. package/dist/{teammate-SXRVXNQV.cjs → teammate-D77B6QRT.cjs} +31 -9
  413. package/dist/{teammate-SD26GR37.js → teammate-EZCMHOIL.js} +30 -8
  414. package/dist/templates-ARG2VRWW.cjs +11 -0
  415. package/dist/templates-UGVZV3KJ.js +11 -0
  416. package/dist/theme-KKRDE6P7.cjs +22 -0
  417. package/dist/theme-XF7XIWBQ.js +22 -0
  418. package/dist/tools-3PPTTKFV.js +9 -0
  419. package/dist/tools-THIQA7WC.cjs +9 -0
  420. package/dist/ui/questionModal.cjs +8 -5
  421. package/dist/ui/questionModal.js +7 -4
  422. package/dist/{undo-OL2EDBRY.js → undo-GNUTFXCW.js} +2 -2
  423. package/dist/undo-U4KN7QQM.cjs +10 -0
  424. package/dist/usage-QSTNSDAO.js +24 -0
  425. package/dist/usage-YDEMQBNQ.cjs +24 -0
  426. package/dist/web-3BA2WV37.cjs +37 -0
  427. package/dist/web-6FYGBX5K.js +37 -0
  428. package/dist/workspaceSafety-MDJGHK6D.cjs +9 -0
  429. package/dist/workspaceSafety-XOUMUBVB.js +9 -0
  430. package/dist/yolo-GF2YD7ZI.js +9 -0
  431. package/dist/yolo-OGDA7HNC.cjs +9 -0
  432. package/dist/yoloMode-3DJDA75U.cjs +17 -0
  433. package/dist/yoloMode-4JOOSU26.js +17 -0
  434. package/package.json +51 -49
  435. package/dist/AgentRegistry-HRPN6ZOF.cjs +0 -10
  436. package/dist/CommunitySkillsCache-KE435RAR.cjs +0 -8
  437. package/dist/GitHubRegistryFetcher-I45SESIL.cjs +0 -7
  438. package/dist/LearnAdvisor-FLBA6FDD.js +0 -9
  439. package/dist/LearnAdvisor-GG3CXQF3.cjs +0 -9
  440. package/dist/MemoryManager-2LQPIYVE.cjs +0 -8
  441. package/dist/PermissionManager-X57BXHJ6.cjs +0 -11
  442. package/dist/ProviderFactory-KPJOGQWF.cjs +0 -9
  443. package/dist/SessionManager-YBJAZXNO.cjs +0 -10
  444. package/dist/SkillsRegistry-7O72A6TZ.cjs +0 -9
  445. package/dist/SubAgent-JT4HZHN7.js +0 -11
  446. package/dist/SubAgent-VPNYDWAU.cjs +0 -11
  447. package/dist/SyncApiClient-HQXJL5BT.cjs +0 -11
  448. package/dist/about-4DB5KTHW.js +0 -12
  449. package/dist/about-LXAOXZFT.cjs +0 -12
  450. package/dist/actionExecutor-23JB2WUC.js +0 -19
  451. package/dist/actionExecutor-X5UEZSKH.cjs +0 -19
  452. package/dist/add-dir-YC37DMSF.cjs +0 -10
  453. package/dist/agents-YF3BSUU5.js +0 -12
  454. package/dist/agents-ZOUHPMYR.cjs +0 -12
  455. package/dist/agents-new-HSH4GQPG.js +0 -14
  456. package/dist/agents-new-VYUDOCE7.cjs +0 -14
  457. package/dist/autoSkill-X5W52WOE.cjs +0 -20
  458. package/dist/automode-SJGM7VEI.cjs +0 -10
  459. package/dist/chunk-ALYU6VTM.js +0 -105
  460. package/dist/chunk-B53A2NM2.js +0 -2030
  461. package/dist/chunk-BJXSNT46.js +0 -100
  462. package/dist/chunk-CB4E2T5N.cjs +0 -312
  463. package/dist/chunk-DNUOXBHL.js +0 -539
  464. package/dist/chunk-EFX2QSZX.cjs +0 -33
  465. package/dist/chunk-GCXYXLRA.cjs +0 -111
  466. package/dist/chunk-H2ZRHQQV.js +0 -33
  467. package/dist/chunk-HNRPK5MY.cjs +0 -85
  468. package/dist/chunk-HVKOZ2VP.cjs +0 -115
  469. package/dist/chunk-JJLYWH5Y.cjs +0 -100
  470. package/dist/chunk-LWUJFGOZ.js +0 -115
  471. package/dist/chunk-MERYP6AM.cjs +0 -539
  472. package/dist/chunk-MZAPWNAC.cjs +0 -207
  473. package/dist/chunk-NTSDP2WB.js +0 -226
  474. package/dist/chunk-OUZQXMHL.cjs +0 -226
  475. package/dist/chunk-PGESAU2W.cjs +0 -2030
  476. package/dist/chunk-SYVYLZZF.cjs +0 -24
  477. package/dist/chunk-SZOLA6FR.js +0 -111
  478. package/dist/chunk-VWDHR4HV.js +0 -168
  479. package/dist/chunk-Y45G6ZO5.cjs +0 -168
  480. package/dist/chunk-YRLYSQEQ.cjs +0 -105
  481. package/dist/chunk-ZYVS43MU.js +0 -312
  482. package/dist/clear-GK4IEUUS.cjs +0 -12
  483. package/dist/communityInstaller-XXC7RLE4.cjs +0 -19
  484. package/dist/completion-HWABSAEL.js +0 -14
  485. package/dist/completion-IUUVQG4D.cjs +0 -14
  486. package/dist/config-HF7WOLZF.cjs +0 -18
  487. package/dist/constants-PEO3P2SJ.cjs +0 -21
  488. package/dist/export-QJAV2FCZ.js +0 -12
  489. package/dist/export-XSRFXGWU.cjs +0 -12
  490. package/dist/feedback-4TCIL3ML.cjs +0 -15
  491. package/dist/feedback-SJ6VVEY3.js +0 -15
  492. package/dist/filesystem-W56QZUJF.cjs +0 -10
  493. package/dist/help-ISBVQL3S.cjs +0 -12
  494. package/dist/history-XQ4GTSFU.cjs +0 -14
  495. package/dist/hooks-CJNKJ5PF.js +0 -13
  496. package/dist/hooks-UTMBTAXT.cjs +0 -13
  497. package/dist/i18n-N7QQ7A5M.cjs +0 -33
  498. package/dist/ide-RTA4UJV4.js +0 -12
  499. package/dist/ide-VWVOLIFF.cjs +0 -12
  500. package/dist/immediateCommandRouter-BW34JNXL.js +0 -9
  501. package/dist/immediateCommandRouter-SHOVNB5X.cjs +0 -9
  502. package/dist/import-ZLJVONXH.cjs +0 -10
  503. package/dist/init-TBKAB4LZ.cjs +0 -10
  504. package/dist/language-MDSHEXHB.cjs +0 -18
  505. package/dist/language-PXTQSHIG.js +0 -18
  506. package/dist/learn-623TW5EK.cjs +0 -20
  507. package/dist/learn-BCPV7GM2.js +0 -20
  508. package/dist/localProjectPermissions-BHQXEWZJ.cjs +0 -18
  509. package/dist/localProjectPermissions-GMOUYQM6.js +0 -18
  510. package/dist/login-QMVEETWJ.js +0 -20
  511. package/dist/login-QYMXAL3K.cjs +0 -20
  512. package/dist/logout-2CMTDAOJ.js +0 -18
  513. package/dist/logout-ZOHVZAUK.cjs +0 -18
  514. package/dist/mcp-IUVKK65S.js +0 -18
  515. package/dist/mcp-TXC7PYG3.cjs +0 -18
  516. package/dist/memory-WRIHDEPK.cjs +0 -10
  517. package/dist/model-RLP75SF5.cjs +0 -10
  518. package/dist/new-HLSFL6A4.cjs +0 -12
  519. package/dist/permissions-GP6FTGZ2.js +0 -13
  520. package/dist/permissions-O6EKKPOG.cjs +0 -13
  521. package/dist/plan-MCAXDIM2.cjs +0 -11
  522. package/dist/quit-TQX6GXA5.cjs +0 -10
  523. package/dist/repeat-BSPS5TWD.cjs +0 -13
  524. package/dist/resume-2GOPDLL4.cjs +0 -13
  525. package/dist/resume-37IUVDA6.js +0 -13
  526. package/dist/search-7KUSHIBL.cjs +0 -17
  527. package/dist/search-OJGDRIMA.js +0 -17
  528. package/dist/sessions-CYYCHSQG.cjs +0 -10
  529. package/dist/settings-2D7CAO66.cjs +0 -30
  530. package/dist/settings-BXR6SBJP.js +0 -30
  531. package/dist/share-BXQY5IQU.js +0 -14
  532. package/dist/share-OSFXZBGS.cjs +0 -14
  533. package/dist/skills-FL6O6AOM.cjs +0 -26
  534. package/dist/skills-PNKQZRNK.js +0 -26
  535. package/dist/skills-new-XFMEHHIF.cjs +0 -15
  536. package/dist/skills-new-ZNZPHUKS.js +0 -15
  537. package/dist/slashCommands-LLCNPK3X.js +0 -76
  538. package/dist/slashCommands-RXZZS6RE.cjs +0 -76
  539. package/dist/status-BCECUJXT.cjs +0 -11
  540. package/dist/status-EFO7MQU3.js +0 -11
  541. package/dist/sync-IJYJ6KKM.js +0 -18
  542. package/dist/sync-LFT6SBPF.cjs +0 -18
  543. package/dist/sync-U7SDPBNZ.cjs +0 -40
  544. package/dist/theme-AWBHSG7J.cjs +0 -18
  545. package/dist/theme-TQLBPJ2E.js +0 -18
  546. package/dist/undo-IBBGP7A2.cjs +0 -10
@@ -0,0 +1,1034 @@
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 _chunkAQ5PVHOCcjs = require('./chunk-AQ5PVHOC.cjs');
4
+
5
+
6
+ var _chunk3OF56EMAcjs = require('./chunk-3OF56EMA.cjs');
7
+
8
+
9
+ var _chunk2VHB43IXcjs = require('./chunk-2VHB43IX.cjs');
10
+
11
+
12
+
13
+ var _chunkKASXKDF2cjs = require('./chunk-KASXKDF2.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 = _chunkKASXKDF2cjs.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: _chunkAQ5PVHOCcjs.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": _chunkAQ5PVHOCcjs.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 = _chunkKASXKDF2cjs.AUTOHAND_PATHS.telemetry;
374
+ var QUEUE_FILE = _chunkKASXKDF2cjs.AUTOHAND_FILES.telemetryQueue;
375
+ var DEVICE_ID_FILE2 = _chunkKASXKDF2cjs.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: true,
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.heartbeatTimer = null}
692
+ __init8() {this.interactionCount = 0}
693
+ __init9() {this.toolsUsed = /* @__PURE__ */ new Set()}
694
+ __init10() {this.errorsCount = 0}
695
+ __init11() {this.currentModel = null}
696
+ __init12() {this.currentProvider = null}
697
+
698
+
699
+ 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);_class3.prototype.__init12.call(this);
700
+ this.client = new TelemetryClient(config);
701
+ this.telemetryEnabled = config.enabled === true;
702
+ this.heartbeatIntervalMs = 6e4;
703
+ }
704
+ /**
705
+ * Get system info for events
706
+ */
707
+ getSystemInfo() {
708
+ return {
709
+ cliVersion: _chunkAQ5PVHOCcjs.package_default.version,
710
+ platform: process.platform,
711
+ osVersion: _os2.default.release(),
712
+ nodeVersion: process.version,
713
+ cpuArch: process.arch,
714
+ cpuCores: _os2.default.cpus().length,
715
+ memoryTotal: Math.round(_os2.default.totalmem() / 1024 / 1024),
716
+ // MB
717
+ memoryFree: Math.round(_os2.default.freemem() / 1024 / 1024)
718
+ // MB
719
+ };
720
+ }
721
+ /**
722
+ * Track a generic event
723
+ */
724
+ async trackEvent(eventType, eventData) {
725
+ await this.client.track({
726
+ eventType,
727
+ eventData,
728
+ sessionId: this.sessionId || "unknown",
729
+ ...this.getSystemInfo(),
730
+ interactionCount: this.interactionCount,
731
+ toolsUsed: Array.from(this.toolsUsed),
732
+ errorsCount: this.errorsCount
733
+ });
734
+ }
735
+ /**
736
+ * Start a new session
737
+ */
738
+ async startSession(sessionId, model, provider, startedAt) {
739
+ this.sessionId = sessionId;
740
+ this.sessionStartTime = this.normalizeSessionStartTime(startedAt);
741
+ this.interactionCount = 0;
742
+ this.toolsUsed.clear();
743
+ this.errorsCount = 0;
744
+ this.currentModel = model || null;
745
+ this.currentProvider = provider || null;
746
+ this.startHeartbeatTimer();
747
+ await this.trackEvent("session_start", {
748
+ model,
749
+ provider
750
+ });
751
+ await this.client.syncQueuedSessions();
752
+ }
753
+ /**
754
+ * End current session
755
+ */
756
+ async endSession(status = "completed") {
757
+ this.stopHeartbeatTimer();
758
+ const duration = this.getSessionDurationSeconds();
759
+ await this.trackEvent("session_end", {
760
+ status,
761
+ duration,
762
+ model: this.currentModel,
763
+ provider: this.currentProvider
764
+ });
765
+ await this.client.syncAll();
766
+ }
767
+ /**
768
+ * Track tool usage
769
+ */
770
+ async trackToolUse(data) {
771
+ this.toolsUsed.add(data.tool);
772
+ if (!data.success) {
773
+ this.errorsCount++;
774
+ }
775
+ await this.trackEvent("tool_use", {
776
+ tool: data.tool,
777
+ success: data.success,
778
+ duration: data.duration,
779
+ error: data.error
780
+ });
781
+ }
782
+ /**
783
+ * Track an error
784
+ */
785
+ async trackError(data) {
786
+ this.errorsCount++;
787
+ 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\\***")]);
788
+ await this.trackEvent("error", {
789
+ type: data.type,
790
+ message: data.message,
791
+ stack: sanitizedStack,
792
+ context: data.context
793
+ });
794
+ }
795
+ /**
796
+ * Track a session failure as a bug report with detailed context.
797
+ * Prefixes the error type with "BUG:" for easy identification.
798
+ */
799
+ async trackSessionFailureBug(data) {
800
+ this.errorsCount++;
801
+ 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\\***")]);
802
+ const bugData = {
803
+ type: "BUG:session_failure",
804
+ errorMessage: data.error.message,
805
+ errorName: data.error.name,
806
+ stack: sanitizedStack,
807
+ retryAttempt: data.retryAttempt,
808
+ maxRetries: data.maxRetries,
809
+ conversationLength: data.conversationLength,
810
+ lastToolCalls: data.lastToolCalls,
811
+ iterationCount: data.iterationCount,
812
+ contextUsage: data.contextUsage,
813
+ model: data.model || this.currentModel || void 0,
814
+ provider: data.provider || this.currentProvider || void 0,
815
+ isRetrying: data.retryAttempt < data.maxRetries
816
+ };
817
+ await this.trackEvent("session_failure_bug", bugData);
818
+ }
819
+ /**
820
+ * Track slash command usage
821
+ */
822
+ async trackCommand(data) {
823
+ this.interactionCount++;
824
+ await this.trackEvent("command_use", {
825
+ command: data.command,
826
+ args: data.args
827
+ });
828
+ }
829
+ /**
830
+ * Track skill activation/usage
831
+ */
832
+ async trackSkillUse(data) {
833
+ await this.trackEvent("skill_use", {
834
+ skillName: data.skillName,
835
+ source: data.source,
836
+ activationType: data.activationType,
837
+ action: data.action
838
+ });
839
+ }
840
+ /**
841
+ * Track model switch
842
+ */
843
+ async trackModelSwitch(data) {
844
+ const previousModel = this.currentModel;
845
+ this.currentModel = data.toModel;
846
+ this.currentProvider = data.provider;
847
+ await this.trackEvent("model_switch", {
848
+ fromModel: previousModel || data.fromModel,
849
+ toModel: data.toModel,
850
+ provider: data.provider
851
+ });
852
+ }
853
+ /**
854
+ * Track heartbeat (periodic check-in)
855
+ */
856
+ async trackHeartbeat() {
857
+ await this.trackEvent("heartbeat", {
858
+ uptime: this.getSessionDurationSeconds()
859
+ });
860
+ }
861
+ /**
862
+ * Record an interaction (user message)
863
+ */
864
+ recordInteraction() {
865
+ this.interactionCount++;
866
+ }
867
+ /**
868
+ * Upload session for cloud sync
869
+ */
870
+ async syncSession(data) {
871
+ if (!this.sessionId) {
872
+ return { success: false, error: "No active session" };
873
+ }
874
+ const endTimeMs = Date.now();
875
+ const endTime = _nullishCoalesce(_optionalChain([data, 'access', _28 => _28.metadata, 'optionalAccess', _29 => _29.endTime]), () => ( new Date(endTimeMs).toISOString()));
876
+ const startTime = _nullishCoalesce(_optionalChain([data, 'access', _30 => _30.metadata, 'optionalAccess', _31 => _31.startTime]), () => ( _optionalChain([this, 'access', _32 => _32.sessionStartTime, 'optionalAccess', _33 => _33.toISOString, 'call', _34 => _34()])));
877
+ const durationSeconds = _nullishCoalesce(_optionalChain([data, 'access', _35 => _35.metadata, 'optionalAccess', _36 => _36.durationSeconds]), () => ( this.getSessionDurationSeconds(endTimeMs)));
878
+ return this.client.uploadSession({
879
+ sessionId: this.sessionId,
880
+ messages: data.messages,
881
+ metadata: {
882
+ model: this.currentModel || void 0,
883
+ provider: this.currentProvider || void 0,
884
+ totalTokens: _optionalChain([data, 'access', _37 => _37.metadata, 'optionalAccess', _38 => _38.totalTokens]),
885
+ startTime,
886
+ endTime,
887
+ durationSeconds,
888
+ workspaceRoot: _optionalChain([data, 'access', _39 => _39.metadata, 'optionalAccess', _40 => _40.workspaceRoot])
889
+ }
890
+ });
891
+ }
892
+ /**
893
+ * Get current session ID
894
+ */
895
+ getSessionId() {
896
+ return this.sessionId;
897
+ }
898
+ /**
899
+ * Get device ID
900
+ */
901
+ getDeviceId() {
902
+ return this.client.getDeviceId();
903
+ }
904
+ /**
905
+ * Get stats
906
+ */
907
+ getStats() {
908
+ return {
909
+ ...this.client.getStats(),
910
+ sessionId: this.sessionId,
911
+ interactionCount: this.interactionCount,
912
+ toolsUsed: Array.from(this.toolsUsed),
913
+ errorsCount: this.errorsCount,
914
+ sessionDuration: this.getSessionDurationSeconds()
915
+ };
916
+ }
917
+ /**
918
+ * Flush pending events
919
+ */
920
+ async flush() {
921
+ return this.client.flush();
922
+ }
923
+ /**
924
+ * Disable telemetry
925
+ */
926
+ disable() {
927
+ this.telemetryEnabled = false;
928
+ this.stopHeartbeatTimer();
929
+ this.client.disable();
930
+ }
931
+ /**
932
+ * Enable telemetry
933
+ */
934
+ enable() {
935
+ this.telemetryEnabled = true;
936
+ if (this.sessionId) {
937
+ this.startHeartbeatTimer();
938
+ }
939
+ this.client.enable();
940
+ }
941
+ /**
942
+ * Stop and cleanup
943
+ */
944
+ async shutdown() {
945
+ this.stopHeartbeatTimer();
946
+ this.client.stopFlushTimer();
947
+ await this.client.syncAll();
948
+ }
949
+ normalizeSessionStartTime(startedAt) {
950
+ if (startedAt instanceof Date) {
951
+ return Number.isFinite(startedAt.getTime()) ? startedAt : new Date(Date.now());
952
+ }
953
+ if (typeof startedAt === "number" || typeof startedAt === "string") {
954
+ const parsed = new Date(startedAt);
955
+ return Number.isFinite(parsed.getTime()) ? parsed : new Date(Date.now());
956
+ }
957
+ return new Date(Date.now());
958
+ }
959
+ getSessionDurationSeconds(nowMs = Date.now()) {
960
+ if (!this.sessionStartTime) return 0;
961
+ return Math.max(0, Math.round((nowMs - this.sessionStartTime.getTime()) / 1e3));
962
+ }
963
+ startHeartbeatTimer() {
964
+ this.stopHeartbeatTimer();
965
+ if (!this.telemetryEnabled) return;
966
+ this.heartbeatTimer = setInterval(() => {
967
+ this.trackHeartbeat().catch(() => {
968
+ });
969
+ }, this.heartbeatIntervalMs);
970
+ _optionalChain([this, 'access', _41 => _41.heartbeatTimer, 'access', _42 => _42.unref, 'optionalCall', _43 => _43()]);
971
+ }
972
+ stopHeartbeatTimer() {
973
+ if (!this.heartbeatTimer) return;
974
+ clearInterval(this.heartbeatTimer);
975
+ this.heartbeatTimer = null;
976
+ }
977
+ }, _class3);
978
+
979
+
980
+
981
+
982
+
983
+
984
+
985
+
986
+
987
+
988
+
989
+
990
+
991
+
992
+
993
+
994
+
995
+
996
+
997
+
998
+
999
+
1000
+ 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;
1001
+ /**
1002
+ * @license
1003
+ * Copyright 2025 Autohand AI LLC
1004
+ * SPDX-License-Identifier: Apache-2.0
1005
+ */
1006
+ /**
1007
+ * @license
1008
+ * Copyright 2026 Autohand AI LLC
1009
+ * SPDX-License-Identifier: Apache-2.0
1010
+ */
1011
+ /**
1012
+ * @license
1013
+ * Copyright 2025 Autohand AI LLC
1014
+ * SPDX-License-Identifier: Apache-2.0
1015
+ *
1016
+ * AutoReportClient - Low-level HTTP client for error reporting
1017
+ * Sends sanitized error reports to the Autohand API for automatic GitHub issue creation
1018
+ */
1019
+ /**
1020
+ * @license
1021
+ * Copyright 2025 Autohand AI LLC
1022
+ * SPDX-License-Identifier: Apache-2.0
1023
+ *
1024
+ * AutoReportManager - High-level manager for automatic error reporting
1025
+ * Handles deduplication, retries, and config-based enable/disable
1026
+ */
1027
+ /**
1028
+ * TelemetryClient - Low-level API client with offline batching
1029
+ * @license Apache-2.0
1030
+ */
1031
+ /**
1032
+ * TelemetryManager - High-level telemetry tracking
1033
+ * @license Apache-2.0
1034
+ */