autohand-cli 0.7.8 → 0.7.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/README.md +19 -0
  2. package/dist/{AutomodeManager-YVCJXOMQ.js → AutomodeManager-NGRAO2MH.js} +35 -8
  3. package/dist/{AutomodeManager-HV6M7EAX.cjs → AutomodeManager-ZKQMBM4T.cjs} +35 -8
  4. package/dist/{CommunitySkillsCache-Q22FUAR5.js → CommunitySkillsCache-ILWHWE5P.js} +2 -2
  5. package/dist/CommunitySkillsCache-KHC6RUJW.cjs +7 -0
  6. package/dist/MemoryManager-6ZT7IDO5.cjs +7 -0
  7. package/dist/MemoryManager-AJGS5AKB.js +7 -0
  8. package/dist/PermissionManager-HG6W2DGU.cjs +10 -0
  9. package/dist/{PermissionManager-HATZKTRC.js → PermissionManager-U5OMGR3L.js} +3 -3
  10. package/dist/SessionManager-BJ2G6VV4.cjs +9 -0
  11. package/dist/{SessionManager-S5R6O3NU.js → SessionManager-ENPGYK5J.js} +2 -2
  12. package/dist/SkillsRegistry-6ZFOCT25.cjs +8 -0
  13. package/dist/{SkillsRegistry-R5WDM6T3.js → SkillsRegistry-C2SHOZ5D.js} +2 -2
  14. package/dist/{SyncApiClient-FAOMIZAP.js → SyncApiClient-AYXYSOJM.js} +1 -1
  15. package/dist/SyncApiClient-ID3KXEMA.cjs +10 -0
  16. package/dist/about-RGUM5QQ4.cjs +11 -0
  17. package/dist/about-VDR3SIHS.js +11 -0
  18. package/dist/add-dir-3BMVJ5H3.cjs +9 -0
  19. package/dist/{add-dir-PNU7AGKO.js → add-dir-RP2BL3JW.js} +2 -1
  20. package/dist/agents-JQ2PHCQB.js +10 -0
  21. package/dist/agents-RGSZ2BM3.cjs +10 -0
  22. package/dist/agents-new-LSJN2L2T.cjs +13 -0
  23. package/dist/agents-new-MZUEVKSK.js +13 -0
  24. package/dist/automode-DP3BMYJB.cjs +9 -0
  25. package/dist/{automode-QCRJSBRT.js → automode-XOF3U3OB.js} +2 -1
  26. package/dist/cc-2W6M7J45.cjs +8 -0
  27. package/dist/cc-UTTLESTY.js +8 -0
  28. package/dist/{chunk-B4ZPNXZE.cjs → chunk-34OGUMRO.cjs} +9 -5
  29. package/dist/chunk-3652ROFD.js +589 -0
  30. package/dist/{chunk-KNLBEUAV.cjs → chunk-3DQSBW4B.cjs} +10 -6
  31. package/dist/{chunk-XFPITUFJ.cjs → chunk-3S4DEIJP.cjs} +50 -8
  32. package/dist/{chunk-5MDDOGTD.cjs → chunk-3UNX56GC.cjs} +30 -37
  33. package/dist/chunk-46WX5IO2.cjs +499 -0
  34. package/dist/{chunk-OC5YDNFC.js → chunk-4ULBAYME.js} +42 -57
  35. package/dist/{chunk-VEDIYPWY.cjs → chunk-5BQ57AZC.cjs} +9 -9
  36. package/dist/{chunk-B5N5UAMO.cjs → chunk-5FZM7KLB.cjs} +13 -10
  37. package/dist/{chunk-JBKP2CLA.cjs → chunk-5NZA4UB4.cjs} +47 -47
  38. package/dist/{chunk-VPAN5H7Q.js → chunk-5Q3W4DEU.js} +43 -36
  39. package/dist/{chunk-VMMGT42E.cjs → chunk-65GTO4QM.cjs} +7 -3
  40. package/dist/{chunk-CXZEPTRI.js → chunk-6P3K4YUW.js} +6 -2
  41. package/dist/{chunk-MDWULS57.js → chunk-6UJMCWRY.js} +56 -33
  42. package/dist/chunk-73XIKTZL.js +124 -0
  43. package/dist/{chunk-23JQSCTO.js → chunk-7QNW24ZT.js} +8 -4
  44. package/dist/{chunk-XT4OSHSB.cjs → chunk-AEYOIPHD.cjs} +6 -2
  45. package/dist/chunk-ANUQFV43.cjs +589 -0
  46. package/dist/chunk-ATR3RORT.js +499 -0
  47. package/dist/{chunk-A6QBABQ7.js → chunk-B72CC4O6.js} +2 -2
  48. package/dist/{chunk-TAZJSKFD.js → chunk-BBIKQW66.js} +9 -5
  49. package/dist/{chunk-FFA4LDAO.cjs → chunk-BDIZGBDA.cjs} +8 -3
  50. package/dist/{chunk-3YEDXG6S.js → chunk-BG4OQUKP.js} +1 -1
  51. package/dist/{chunk-WIUGUR5T.js → chunk-BODVOW7B.js} +67 -16
  52. package/dist/{chunk-A552JHUJ.cjs → chunk-BZ73ZQTE.cjs} +34 -25
  53. package/dist/{chunk-YDOR2OCA.cjs → chunk-C22G4UE4.cjs} +27 -19
  54. package/dist/{chunk-GFJ6AETU.cjs → chunk-C2E3GJEE.cjs} +12 -9
  55. package/dist/{chunk-UL7YPRCU.js → chunk-C5SVIQG3.js} +10 -5
  56. package/dist/{chunk-6KMAJTU3.js → chunk-CUBYCLNL.js} +3 -2
  57. package/dist/{chunk-52MLYK5P.js → chunk-D2XFTCRP.js} +1 -1
  58. package/dist/{chunk-OBV3UUIL.js → chunk-DEAEO7RI.js} +1 -1
  59. package/dist/chunk-DMPVI3YK.cjs +400 -0
  60. package/dist/{chunk-C26EN22G.cjs → chunk-DUDDZRCS.cjs} +9 -5
  61. package/dist/{chunk-4RWTUT2Z.js → chunk-E7YL3AHT.js} +32 -23
  62. package/dist/{chunk-54GVL2SE.cjs → chunk-EAOEAQGF.cjs} +3 -2
  63. package/dist/{chunk-PU534KPO.cjs → chunk-EV53SLSB.cjs} +4 -4
  64. package/dist/{chunk-EDGV5BNH.js → chunk-F3EIOVSQ.js} +26 -33
  65. package/dist/{chunk-SFGJQPGC.cjs → chunk-FPHU2ES6.cjs} +56 -33
  66. package/dist/{chunk-G77ZY4QG.js → chunk-GD4AFYJ3.js} +1 -1
  67. package/dist/{chunk-PMMSDR44.cjs → chunk-GIZL57FE.cjs} +5 -1
  68. package/dist/{chunk-I4HVBWYF.js → chunk-GLAE5K5W.js} +7 -2
  69. package/dist/{chunk-4AMTDSQ3.cjs → chunk-HDSEJMWI.cjs} +6 -3
  70. package/dist/chunk-HLFZPN65.js +94 -0
  71. package/dist/{chunk-ZWS3KSMK.js → chunk-HQQ4NKER.js} +5 -2
  72. package/dist/{chunk-WBDPILKI.cjs → chunk-HVOBMOZ2.cjs} +6 -2
  73. package/dist/{chunk-MJFBVQHB.js → chunk-IPI3JXKP.js} +10 -7
  74. package/dist/chunk-IXFOH4OC.cjs +222 -0
  75. package/dist/chunk-JS7IPR7P.js +249 -0
  76. package/dist/{chunk-7TOHYAUF.cjs → chunk-KC5FPUOF.cjs} +2 -2
  77. package/dist/{chunk-7VW3A7DO.cjs → chunk-L42HTMMR.cjs} +2 -2
  78. package/dist/chunk-LGGZQTLM.cjs +209 -0
  79. package/dist/chunk-LOXOD4IS.cjs +8630 -0
  80. package/dist/chunk-MNCWB5F7.cjs +63 -0
  81. package/dist/{chunk-AVL4DKQO.js → chunk-MYNHJHDZ.js} +1 -1
  82. package/dist/{chunk-GDTZQSJ6.cjs → chunk-N4ZSG6JJ.cjs} +2 -2
  83. package/dist/chunk-NCC6ETZS.js +362 -0
  84. package/dist/chunk-NF7RIHJK.js +45 -0
  85. package/dist/{chunk-SYJLMBLP.cjs → chunk-NGBN2NGH.cjs} +77 -26
  86. package/dist/{chunk-SLISYSP4.cjs → chunk-NRORJRD4.cjs} +4 -4
  87. package/dist/{chunk-OTS4YFSZ.cjs → chunk-OKABWSWA.cjs} +7 -3
  88. package/dist/{chunk-KH7BCZJN.js → chunk-OLG7LZBD.js} +1 -1
  89. package/dist/{chunk-KZ7VMQTC.js → chunk-OMEH2EVE.js} +5 -1
  90. package/dist/{chunk-U5WIP4HS.js → chunk-P5VDZ6PV.js} +47 -5
  91. package/dist/{chunk-V5MTBGM4.cjs → chunk-PA2H2263.cjs} +6 -2
  92. package/dist/chunk-PGRH5Q77.cjs +249 -0
  93. package/dist/{chunk-DPJ3IIBB.js → chunk-PM62ZYXA.js} +18 -10
  94. package/dist/chunk-PNSRJT46.js +380 -0
  95. package/dist/{chunk-C3IFF3EH.cjs → chunk-PSED4Z4X.cjs} +43 -58
  96. package/dist/{chunk-EKY5PKQI.js → chunk-PWLLLJHU.js} +5 -1
  97. package/dist/{chunk-DOTAX65F.js → chunk-PYLR4J2D.js} +8 -4
  98. package/dist/{chunk-YWKZF2SA.js → chunk-QC6IUDDJ.js} +46 -46
  99. package/dist/{chunk-4M2GX7RH.cjs → chunk-QM7HZCQW.cjs} +11 -6
  100. package/dist/chunk-QRQ5EX7I.cjs +380 -0
  101. package/dist/{chunk-YDH2BMEN.js → chunk-QU64XI5X.js} +9 -6
  102. package/dist/{chunk-3L76MLO5.cjs → chunk-R7SDL3DJ.cjs} +27 -31
  103. package/dist/{chunk-WQSWU2QA.cjs → chunk-RJP3SZ7Q.cjs} +46 -255
  104. package/dist/{chunk-BAFJQUWR.js → chunk-RJXNNIFW.js} +18 -22
  105. package/dist/{chunk-YAGD43KA.cjs → chunk-S5G7OEN2.cjs} +47 -40
  106. package/dist/{chunk-2JPUEN44.cjs → chunk-SA4JOV4F.cjs} +61 -86
  107. package/dist/chunk-SAG6IY5Z.cjs +94 -0
  108. package/dist/chunk-TSV4LVHK.js +35 -0
  109. package/dist/{chunk-JHFH3N4U.cjs → chunk-TSY7JHIV.cjs} +2 -2
  110. package/dist/chunk-U23U52ZN.cjs +124 -0
  111. package/dist/chunk-UET7BDX2.js +8630 -0
  112. package/dist/chunk-ULQ6MDSJ.cjs +362 -0
  113. package/dist/{chunk-WH3D42BQ.js → chunk-UM4QEO36.js} +59 -84
  114. package/dist/chunk-VXCMGBXY.cjs +35 -0
  115. package/dist/chunk-WD5ZF6HE.js +63 -0
  116. package/dist/chunk-WH5RW7DV.cjs +85 -0
  117. package/dist/{chunk-GSOEIEOU.js → chunk-WJ276BIP.js} +5 -1
  118. package/dist/{chunk-P2Z6GDEN.js → chunk-WLTVF77A.js} +1 -1
  119. package/dist/{chunk-53BR4MUW.cjs → chunk-WOGJXDBU.cjs} +3 -3
  120. package/dist/{chunk-QJ53OSGF.js → chunk-WRJLBHWB.js} +6 -2
  121. package/dist/chunk-WYLFLZ42.js +222 -0
  122. package/dist/{chunk-B7EUETGY.cjs → chunk-XL77XYI2.cjs} +4 -4
  123. package/dist/{chunk-NI3BQXKU.js → chunk-XLI7SHCH.js} +2 -2
  124. package/dist/chunk-Y27LG4BQ.cjs +45 -0
  125. package/dist/chunk-Y6OWFIUF.js +209 -0
  126. package/dist/chunk-YKSSNFDZ.js +400 -0
  127. package/dist/{chunk-VRI7EXV6.js → chunk-YMDLUTF2.js} +5 -1
  128. package/dist/chunk-YVY27BJT.js +85 -0
  129. package/dist/{chunk-GWIAMKKF.js → chunk-ZBIBLOZL.js} +40 -249
  130. package/dist/completion-HVSWU5GR.cjs +13 -0
  131. package/dist/completion-WJ2MVNDH.js +13 -0
  132. package/dist/constants-RBQTR32A.cjs +20 -0
  133. package/dist/{constants-ZLG6M5SI.js → constants-V6J54N3X.js} +1 -1
  134. package/dist/export-NN7F5ANA.js +11 -0
  135. package/dist/export-UPS3AK2P.cjs +11 -0
  136. package/dist/feedback-ARI7CLVQ.js +14 -0
  137. package/dist/feedback-OZTPYHKJ.cjs +14 -0
  138. package/dist/help-4674IV4D.cjs +58 -0
  139. package/dist/help-ENG5KV2M.js +58 -0
  140. package/dist/history-2KUM6GN4.cjs +13 -0
  141. package/dist/history-RZFT34Q7.js +13 -0
  142. package/dist/hooks-7QSUBHBM.cjs +12 -0
  143. package/dist/hooks-S4MD4QSR.js +12 -0
  144. package/dist/i18n-6NKENUIV.js +32 -0
  145. package/dist/i18n-MXQXQOVE.cjs +32 -0
  146. package/dist/ide-5STDV43A.cjs +11 -0
  147. package/dist/ide-W2NYXOWQ.js +11 -0
  148. package/dist/index.cjs +18002 -13864
  149. package/dist/index.js +18252 -14114
  150. package/dist/init-FG5KEJCZ.cjs +9 -0
  151. package/dist/init-TV4MJDYK.js +9 -0
  152. package/dist/language-52Q7CSAY.cjs +16 -0
  153. package/dist/language-FXFDGOBF.js +16 -0
  154. package/dist/localProjectPermissions-2EATUDZM.cjs +17 -0
  155. package/dist/{localProjectPermissions-YFFAKLUZ.js → localProjectPermissions-WQYMGI42.js} +2 -2
  156. package/dist/login-AN42IOBK.js +18 -0
  157. package/dist/login-I65V4TGU.cjs +18 -0
  158. package/dist/logout-KK5UWGNG.js +16 -0
  159. package/dist/logout-VYYNWBHZ.cjs +16 -0
  160. package/dist/mcp-4SKTDECJ.js +15 -0
  161. package/dist/mcp-AGWPTMAX.cjs +15 -0
  162. package/dist/mcp-install-3NN2HAYR.cjs +473 -0
  163. package/dist/mcp-install-KTV52DQK.js +473 -0
  164. package/dist/memory-LG4K6XV6.cjs +9 -0
  165. package/dist/{memory-4GSP7NKV.js → memory-LRDK2SYC.js} +2 -1
  166. package/dist/model-P5D7ATE7.cjs +9 -0
  167. package/dist/{model-HKEFSH5E.js → model-WBFJIGUN.js} +2 -1
  168. package/dist/{new-EEZC4XXV.js → new-5A7RQEKI.js} +2 -1
  169. package/dist/new-EAATWI2G.cjs +9 -0
  170. package/dist/permissions-5URK6C44.js +12 -0
  171. package/dist/permissions-CJUDVG63.cjs +12 -0
  172. package/dist/plan-B3CW5DXJ.cjs +10 -0
  173. package/dist/plan-JFGNRL2S.js +10 -0
  174. package/dist/quit-A33JHDG7.cjs +9 -0
  175. package/dist/quit-IYBLN3DB.js +9 -0
  176. package/dist/resume-OPSJTCH7.cjs +12 -0
  177. package/dist/resume-TOWEEN5D.js +12 -0
  178. package/dist/search-GOLIE5BA.js +14 -0
  179. package/dist/search-H42HGUK5.cjs +14 -0
  180. package/dist/{sessions-4KXIT76T.js → sessions-B5NENDKY.js} +2 -1
  181. package/dist/sessions-YHAVEMWY.cjs +9 -0
  182. package/dist/share-2JD2AKKX.cjs +13 -0
  183. package/dist/share-MYGDOTQE.js +13 -0
  184. package/dist/{skills-3YEEODHK.js → skills-ICEQ2TNC.js} +2 -1
  185. package/dist/skills-LFVNZOMF.cjs +13 -0
  186. package/dist/{skills-install-KAXAQSN6.js → skills-install-6RN7FVCP.js} +9 -7
  187. package/dist/{skills-install-FTGOHOZ4.cjs → skills-install-LU6GA2WF.cjs} +14 -12
  188. package/dist/skills-new-5BM5PDFX.cjs +14 -0
  189. package/dist/skills-new-KWBWOX74.js +14 -0
  190. package/dist/status-M3XHJELG.cjs +10 -0
  191. package/dist/status-ZQDUYMKQ.js +10 -0
  192. package/dist/sync-6M3WRKMH.cjs +39 -0
  193. package/dist/sync-73D2MP65.cjs +16 -0
  194. package/dist/{sync-H4UHHLKU.js → sync-EXYX7HXW.js} +3 -3
  195. package/dist/sync-LL6M67CN.js +16 -0
  196. package/dist/theme-IFEI2IBJ.cjs +16 -0
  197. package/dist/theme-U3SKEULY.js +16 -0
  198. package/dist/ui/questionModal.cjs +28 -0
  199. package/dist/ui/questionModal.d.cts +11 -0
  200. package/dist/ui/questionModal.d.ts +11 -0
  201. package/dist/ui/questionModal.js +28 -0
  202. package/dist/undo-4DS67OAW.cjs +9 -0
  203. package/dist/undo-YMALVAPN.js +9 -0
  204. package/package.json +3 -2
  205. package/dist/CommunitySkillsCache-2BITCEAA.cjs +0 -7
  206. package/dist/MemoryManager-2ATHG7BH.js +0 -7
  207. package/dist/MemoryManager-AENCGCEW.cjs +0 -7
  208. package/dist/PermissionManager-6HZGTK2N.cjs +0 -10
  209. package/dist/SessionManager-AG4WT3DP.cjs +0 -9
  210. package/dist/SkillsRegistry-ZXU6YDRP.cjs +0 -8
  211. package/dist/SyncApiClient-UOA4VLLD.cjs +0 -10
  212. package/dist/add-dir-OMK3Y4DM.cjs +0 -8
  213. package/dist/agents-ICAC3KD3.js +0 -9
  214. package/dist/agents-YONWPKFS.cjs +0 -9
  215. package/dist/agents-new-NV557UVG.cjs +0 -10
  216. package/dist/agents-new-QHM3CO4B.js +0 -10
  217. package/dist/automode-BRHUHGXU.cjs +0 -8
  218. package/dist/chunk-3HPUOQJN.cjs +0 -23
  219. package/dist/chunk-5DN5KNXU.js +0 -81
  220. package/dist/chunk-7BYSXAKS.js +0 -23
  221. package/dist/chunk-ARVFUZOB.js +0 -736
  222. package/dist/chunk-BEIG7V7Q.cjs +0 -51
  223. package/dist/chunk-GWXXFQ3F.cjs +0 -81
  224. package/dist/chunk-XFQS2VGT.cjs +0 -736
  225. package/dist/chunk-Z3Q2AFDS.js +0 -51
  226. package/dist/completion-WVFWX7XQ.cjs +0 -10
  227. package/dist/completion-Y42FKDT3.js +0 -10
  228. package/dist/constants-G2PLP5HH.cjs +0 -20
  229. package/dist/export-BKBJ7PB2.cjs +0 -8
  230. package/dist/export-WJ5P6E5Z.js +0 -8
  231. package/dist/feedback-HZBCTSFG.js +0 -10
  232. package/dist/feedback-JBQ3UPGZ.cjs +0 -10
  233. package/dist/help-PKC6QCNG.js +0 -10
  234. package/dist/help-UEELQRHP.cjs +0 -10
  235. package/dist/hooks-G4VLYMLX.cjs +0 -9
  236. package/dist/hooks-LN4A6NQL.js +0 -9
  237. package/dist/init-DML7AOII.js +0 -8
  238. package/dist/init-SLLSDDJN.cjs +0 -8
  239. package/dist/language-KODBDE5R.js +0 -12
  240. package/dist/language-SJT475NW.cjs +0 -12
  241. package/dist/localProjectPermissions-AYQYGTOE.cjs +0 -17
  242. package/dist/login-TC2KROQI.js +0 -14
  243. package/dist/login-TYMR2ZD3.cjs +0 -14
  244. package/dist/logout-2ECV365P.js +0 -12
  245. package/dist/logout-CO3CPYZJ.cjs +0 -12
  246. package/dist/memory-CFNC7RJH.cjs +0 -8
  247. package/dist/model-TKVEJ5BC.cjs +0 -8
  248. package/dist/new-EB2MBQXA.cjs +0 -8
  249. package/dist/permissions-5MTH22EF.js +0 -9
  250. package/dist/permissions-IP5SITPI.cjs +0 -9
  251. package/dist/quit-2RYFGIJP.cjs +0 -8
  252. package/dist/quit-RSYIERO5.js +0 -8
  253. package/dist/resume-EPOEF3WV.cjs +0 -9
  254. package/dist/resume-LOYD5MMP.js +0 -9
  255. package/dist/sessions-7RTCPVNE.cjs +0 -8
  256. package/dist/share-APR5S2CS.cjs +0 -10
  257. package/dist/share-VLJFDZKR.js +0 -10
  258. package/dist/skills-CRM55MKM.cjs +0 -12
  259. package/dist/skills-new-JF4FKNUT.cjs +0 -11
  260. package/dist/skills-new-JYX2GBKM.js +0 -11
  261. package/dist/status-DAEFE7ZC.cjs +0 -9
  262. package/dist/status-PBFFUC4Q.js +0 -9
  263. package/dist/sync-3B7SNBYC.js +0 -14
  264. package/dist/sync-4RARBQIH.cjs +0 -39
  265. package/dist/sync-YZ6YZ42H.cjs +0 -14
  266. package/dist/theme-3XV5BWUB.js +0 -12
  267. package/dist/theme-Z2WS5XWZ.cjs +0 -12
  268. package/dist/undo-2WR2ZIEC.cjs +0 -8
  269. package/dist/undo-7QJBXARS.js +0 -8
@@ -0,0 +1,499 @@
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; }
2
+
3
+ var _chunkQRQ5EX7Icjs = require('./chunk-QRQ5EX7I.cjs');
4
+
5
+
6
+ var _chunkLOXOD4IScjs = require('./chunk-LOXOD4IS.cjs');
7
+
8
+ // src/commands/ide.ts
9
+ var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
10
+ var _terminallink = require('terminal-link'); var _terminallink2 = _interopRequireDefault(_terminallink);
11
+
12
+ // src/core/ide/ideDetector.ts
13
+ var _child_process = require('child_process');
14
+ var _os = require('os'); var _os2 = _interopRequireDefault(_os);
15
+ var _path = require('path'); var _path2 = _interopRequireDefault(_path);
16
+
17
+ // src/core/ide/ideTypes.ts
18
+ var IDE_REGISTRY = [
19
+ {
20
+ kind: "vscode",
21
+ displayName: "Visual Studio Code",
22
+ processPatterns: {
23
+ darwin: ["Visual Studio Code", "code "],
24
+ linux: ["code ", "/code"],
25
+ win32: ["Code.exe"]
26
+ },
27
+ extensionUrl: "https://marketplace.visualstudio.com/items?itemName=AutohandAI.vscode-autohand",
28
+ storage: {
29
+ type: "vscode-family",
30
+ darwin: "Code",
31
+ linux: "Code",
32
+ win32: "Code"
33
+ }
34
+ },
35
+ {
36
+ kind: "vscode-insiders",
37
+ displayName: "Visual Studio Code Insiders",
38
+ processPatterns: {
39
+ darwin: ["Code - Insiders", "code-insiders "],
40
+ linux: ["code-insiders ", "/code-insiders"],
41
+ win32: ["Code - Insiders.exe"]
42
+ },
43
+ extensionUrl: "https://marketplace.visualstudio.com/items?itemName=AutohandAI.vscode-autohand",
44
+ storage: {
45
+ type: "vscode-family",
46
+ darwin: "Code - Insiders",
47
+ linux: "Code - Insiders",
48
+ win32: "Code - Insiders"
49
+ }
50
+ },
51
+ {
52
+ kind: "cursor",
53
+ displayName: "Cursor",
54
+ processPatterns: {
55
+ darwin: ["Cursor.app", "cursor "],
56
+ linux: ["cursor ", "/cursor"],
57
+ win32: ["Cursor.exe"]
58
+ },
59
+ storage: {
60
+ type: "vscode-family",
61
+ darwin: "Cursor",
62
+ linux: "Cursor",
63
+ win32: "Cursor"
64
+ }
65
+ },
66
+ {
67
+ kind: "zed",
68
+ displayName: "Zed",
69
+ processPatterns: {
70
+ darwin: ["Zed.app", "/zed "],
71
+ linux: ["zed ", "/zed"],
72
+ win32: ["Zed.exe"]
73
+ },
74
+ extensionUrl: "https://zed.dev/extensions/autohand-acp",
75
+ storage: {
76
+ type: "zed",
77
+ darwin: "Zed",
78
+ linux: "zed",
79
+ win32: "Zed"
80
+ }
81
+ },
82
+ {
83
+ kind: "antigravity",
84
+ displayName: "Antigravity",
85
+ processPatterns: {
86
+ darwin: ["Antigravity.app", "antigravity "],
87
+ linux: [],
88
+ win32: []
89
+ },
90
+ storage: {
91
+ type: "vscode-family",
92
+ darwin: "Antigravity"
93
+ }
94
+ }
95
+ ];
96
+
97
+ // src/core/ide/ideDetector.ts
98
+ async function detectRunningIDEs(cwd) {
99
+ const platform = getCurrentPlatform();
100
+ const normalizedCwd = _path2.default.resolve(cwd);
101
+ const processLines = await getProcessList(platform);
102
+ const detected = [];
103
+ for (const entry of IDE_REGISTRY) {
104
+ const patterns = _nullishCoalesce(entry.processPatterns[platform], () => ( []));
105
+ if (patterns.length === 0) continue;
106
+ const matchingLines = findProcessLines(processLines, patterns);
107
+ if (matchingLines.length === 0) continue;
108
+ const argPaths = extractWorkspacePaths(matchingLines, entry.kind, platform);
109
+ if (argPaths.length > 0) {
110
+ const seen = /* @__PURE__ */ new Set();
111
+ for (const wsPath of argPaths) {
112
+ const resolvedWs = _path2.default.resolve(wsPath);
113
+ if (seen.has(resolvedWs)) continue;
114
+ seen.add(resolvedWs);
115
+ detected.push({
116
+ kind: entry.kind,
117
+ displayName: entry.displayName,
118
+ workspacePath: resolvedWs,
119
+ matchesCwd: pathMatchesCwd(normalizedCwd, resolvedWs, platform),
120
+ extensionUrl: entry.extensionUrl
121
+ });
122
+ }
123
+ } else {
124
+ const cwdFoundInStorage = await checkCwdInStorage(entry, normalizedCwd, platform);
125
+ detected.push({
126
+ kind: entry.kind,
127
+ displayName: entry.displayName,
128
+ workspacePath: cwdFoundInStorage ? normalizedCwd : null,
129
+ matchesCwd: cwdFoundInStorage,
130
+ extensionUrl: entry.extensionUrl
131
+ });
132
+ }
133
+ }
134
+ detected.sort((a, b) => {
135
+ if (a.matchesCwd && !b.matchesCwd) return -1;
136
+ if (!a.matchesCwd && b.matchesCwd) return 1;
137
+ return a.displayName.localeCompare(b.displayName);
138
+ });
139
+ return detected;
140
+ }
141
+ function getCurrentPlatform() {
142
+ return process.platform;
143
+ }
144
+ function pathMatchesCwd(normalizedCwd, workspacePath, platform) {
145
+ if (platform === "linux") {
146
+ return normalizedCwd === workspacePath;
147
+ }
148
+ return normalizedCwd.toLowerCase() === workspacePath.toLowerCase();
149
+ }
150
+ async function getProcessList(platform) {
151
+ if (platform === "win32") {
152
+ return getWindowsProcessList();
153
+ }
154
+ return getUnixProcessList();
155
+ }
156
+ async function getUnixProcessList() {
157
+ return new Promise((resolve) => {
158
+ _child_process.exec.call(void 0, "ps aux", { encoding: "utf-8", timeout: 5e3 }, (error, stdout) => {
159
+ if (error) {
160
+ resolve([]);
161
+ return;
162
+ }
163
+ resolve(stdout.split("\n"));
164
+ });
165
+ });
166
+ }
167
+ async function getWindowsProcessList() {
168
+ return new Promise((resolve) => {
169
+ const cmd = 'powershell -NoProfile -Command "Get-CimInstance Win32_Process | Select-Object Name,CommandLine | ConvertTo-Json"';
170
+ _child_process.exec.call(void 0, cmd, { encoding: "utf-8", timeout: 8e3 }, (error, stdout) => {
171
+ if (error) {
172
+ resolve([]);
173
+ return;
174
+ }
175
+ try {
176
+ const processes = JSON.parse(stdout);
177
+ const lines = (Array.isArray(processes) ? processes : [processes]).map(
178
+ (p) => `${_nullishCoalesce(p.Name, () => ( ""))} ${_nullishCoalesce(p.CommandLine, () => ( ""))}`
179
+ );
180
+ resolve(lines);
181
+ } catch (e) {
182
+ resolve([]);
183
+ }
184
+ });
185
+ });
186
+ }
187
+ function findProcessLines(lines, patterns) {
188
+ return lines.filter(
189
+ (line) => patterns.some((pattern) => line.includes(pattern))
190
+ );
191
+ }
192
+ function extractWorkspacePaths(lines, kind, platform) {
193
+ const paths = /* @__PURE__ */ new Set();
194
+ for (const line of lines) {
195
+ const folderUriMatch = line.match(/--folder-uri\s+file:\/\/([^\s]+)/);
196
+ if (_optionalChain([folderUriMatch, 'optionalAccess', _ => _[1]])) {
197
+ try {
198
+ const decoded = decodeURIComponent(folderUriMatch[1]);
199
+ if (!isRuntimePath(decoded, platform)) {
200
+ paths.add(decoded);
201
+ }
202
+ continue;
203
+ } catch (e2) {
204
+ }
205
+ }
206
+ const extractedPaths = extractPathsFromArgs(line, kind, platform);
207
+ for (const p of extractedPaths) {
208
+ paths.add(p);
209
+ }
210
+ }
211
+ return [...paths];
212
+ }
213
+ function extractPathsFromArgs(line, _kind, platform) {
214
+ const results = [];
215
+ let pathMatches;
216
+ if (platform === "win32") {
217
+ pathMatches = line.match(/\s([A-Za-z]:\\[^\s"]+)/g);
218
+ } else {
219
+ pathMatches = line.match(/\s(\/(?:Users|home|root)[^\s]+)/g);
220
+ }
221
+ if (!pathMatches) return results;
222
+ for (const match of pathMatches) {
223
+ const candidate = match.trim();
224
+ if (isRuntimePath(candidate, platform)) continue;
225
+ if (looksLikeWorkspace(candidate, platform)) {
226
+ results.push(candidate);
227
+ }
228
+ }
229
+ return results;
230
+ }
231
+ function isRuntimePath(p, platform) {
232
+ const plat = _nullishCoalesce(platform, () => ( getCurrentPlatform()));
233
+ const commonPatterns = [
234
+ "node_modules",
235
+ ".vscode",
236
+ ".cursor",
237
+ "Frameworks/",
238
+ "Helper",
239
+ "Crashpad",
240
+ "chrome-sandbox",
241
+ ".log",
242
+ ".sock",
243
+ ".pid"
244
+ ];
245
+ const unixPatterns = [
246
+ "/Applications/",
247
+ "/Library/",
248
+ "/System/",
249
+ "/usr/",
250
+ "/opt/",
251
+ "/tmp/",
252
+ "/var/",
253
+ "/private/",
254
+ "/.local/share/",
255
+ "/.config/",
256
+ "/.cache/",
257
+ ".app/",
258
+ "MacOS/",
259
+ "Resources/"
260
+ ];
261
+ const windowsPatterns = [
262
+ "Program Files",
263
+ "Program Files (x86)",
264
+ "\\Windows\\",
265
+ "\\AppData\\",
266
+ "\\ProgramData\\"
267
+ ];
268
+ const patterns = [
269
+ ...commonPatterns,
270
+ ...plat === "win32" ? windowsPatterns : unixPatterns
271
+ ];
272
+ return patterns.some((pattern) => p.includes(pattern));
273
+ }
274
+ function looksLikeWorkspace(p, platform) {
275
+ const plat = _nullishCoalesce(platform, () => ( getCurrentPlatform()));
276
+ if (plat === "win32") {
277
+ return /^[A-Za-z]:\\Users\\[^\\]+\\.+/.test(p);
278
+ }
279
+ return /^\/(Users|home)\/[^/]+\/.+/.test(p) || /^\/root\/.+/.test(p);
280
+ }
281
+ function getStorageBasePath(type, platform) {
282
+ const home = _os2.default.homedir();
283
+ switch (platform) {
284
+ case "darwin":
285
+ return _path2.default.join(home, "Library", "Application Support");
286
+ case "linux":
287
+ if (type === "zed") {
288
+ return _nullishCoalesce(process.env["XDG_DATA_HOME"], () => ( _path2.default.join(home, ".local", "share")));
289
+ }
290
+ return _nullishCoalesce(process.env["XDG_CONFIG_HOME"], () => ( _path2.default.join(home, ".config")));
291
+ case "win32":
292
+ if (type === "zed") {
293
+ return _nullishCoalesce(process.env["LOCALAPPDATA"], () => ( _path2.default.join(home, "AppData", "Local")));
294
+ }
295
+ return _nullishCoalesce(process.env["APPDATA"], () => ( _path2.default.join(home, "AppData", "Roaming")));
296
+ default:
297
+ return _path2.default.join(home, ".config");
298
+ }
299
+ }
300
+ async function checkCwdInStorage(entry, normalizedCwd, platform) {
301
+ const storageName = _optionalChain([entry, 'access', _2 => _2.storage, 'optionalAccess', _3 => _3[platform]]);
302
+ if (!storageName || !entry.storage) return false;
303
+ try {
304
+ if (entry.storage.type === "zed") {
305
+ return await checkZedStorage(storageName, normalizedCwd, platform);
306
+ }
307
+ return await checkVSCodeFamilyStorage(storageName, normalizedCwd, platform);
308
+ } catch (e3) {
309
+ return false;
310
+ }
311
+ }
312
+ async function checkVSCodeFamilyStorage(storageName, normalizedCwd, platform) {
313
+ const basePath = getStorageBasePath("vscode-family", platform);
314
+ const dbPath = _path2.default.join(basePath, storageName, "User", "globalStorage", "state.vscdb");
315
+ const raw = await querySqlite(
316
+ dbPath,
317
+ "SELECT value FROM ItemTable WHERE key = 'history.recentlyOpenedPathsList'"
318
+ );
319
+ if (!raw) return false;
320
+ try {
321
+ const data = JSON.parse(raw);
322
+ for (const entry of _nullishCoalesce(data.entries, () => ( []))) {
323
+ if (!entry.folderUri) continue;
324
+ try {
325
+ const url = new URL(entry.folderUri);
326
+ if (url.protocol === "file:") {
327
+ const folder = _path2.default.resolve(decodeURIComponent(url.pathname));
328
+ if (pathMatchesCwd(normalizedCwd, folder, platform)) return true;
329
+ }
330
+ } catch (e4) {
331
+ }
332
+ }
333
+ return false;
334
+ } catch (e5) {
335
+ return false;
336
+ }
337
+ }
338
+ async function checkZedStorage(storageName, normalizedCwd, platform) {
339
+ const basePath = getStorageBasePath("zed", platform);
340
+ const dbPath = _path2.default.join(basePath, storageName, "db", "0-stable", "db.sqlite");
341
+ const escaped = normalizedCwd.replace(/'/g, "''");
342
+ const raw = await querySqlite(
343
+ dbPath,
344
+ `SELECT COUNT(*) FROM workspaces WHERE paths IS NOT NULL AND paths = '${escaped}'`
345
+ );
346
+ return raw !== null && raw.trim() !== "0";
347
+ }
348
+ async function querySqlite(dbPath, query) {
349
+ return new Promise((resolve) => {
350
+ _child_process.exec.call(void 0,
351
+ `sqlite3 -readonly "${dbPath}" "${query}"`,
352
+ { encoding: "utf-8", timeout: 3e3 },
353
+ (error, stdout) => {
354
+ if (error) {
355
+ resolve(null);
356
+ return;
357
+ }
358
+ const trimmed = stdout.trim();
359
+ resolve(trimmed.length > 0 ? trimmed : null);
360
+ }
361
+ );
362
+ });
363
+ }
364
+ function getExtensionSuggestions(detected) {
365
+ const detectedKinds = new Set(detected.map((d) => d.kind));
366
+ const seen = /* @__PURE__ */ new Set();
367
+ const suggestions = [];
368
+ for (const entry of IDE_REGISTRY) {
369
+ if (!entry.extensionUrl) continue;
370
+ if (!detectedKinds.has(entry.kind)) continue;
371
+ if (seen.has(entry.extensionUrl)) continue;
372
+ seen.add(entry.extensionUrl);
373
+ suggestions.push({
374
+ displayName: entry.displayName,
375
+ url: entry.extensionUrl
376
+ });
377
+ }
378
+ return suggestions;
379
+ }
380
+
381
+ // src/commands/ide.ts
382
+ function groupByIDE(detected) {
383
+ const matching = [];
384
+ const matchedKinds = /* @__PURE__ */ new Set();
385
+ const nonMatching = /* @__PURE__ */ new Map();
386
+ for (const ide2 of detected) {
387
+ if (ide2.matchesCwd) {
388
+ matching.push(ide2);
389
+ matchedKinds.add(ide2.kind);
390
+ }
391
+ }
392
+ for (const ide2 of detected) {
393
+ if (matchedKinds.has(ide2.kind)) continue;
394
+ if (nonMatching.has(ide2.kind)) continue;
395
+ nonMatching.set(ide2.kind, ide2);
396
+ }
397
+ return { matching, nonMatching };
398
+ }
399
+ async function ide(ctx) {
400
+ console.log(_chalk2.default.bold.cyan(`
401
+ ${_chunkLOXOD4IScjs.t.call(void 0, "commands.ide.title")}`));
402
+ console.log(_chalk2.default.gray(_chunkLOXOD4IScjs.t.call(void 0, "commands.ide.connectDescription")));
403
+ console.log();
404
+ const detected = await detectRunningIDEs(ctx.workspaceRoot);
405
+ const { matching, nonMatching } = groupByIDE(detected);
406
+ if (detected.length === 0) {
407
+ console.log(_chalk2.default.yellow(_chunkLOXOD4IScjs.t.call(void 0, "commands.ide.noIdesDetected")));
408
+ console.log();
409
+ printExtensionSuggestions(detected);
410
+ return null;
411
+ }
412
+ if (matching.length === 0) {
413
+ console.log(_chalk2.default.yellow(_chunkLOXOD4IScjs.t.call(void 0, "commands.ide.noMatchingIdes")));
414
+ console.log();
415
+ if (nonMatching.size > 0) {
416
+ console.log(
417
+ _chalk2.default.gray(
418
+ _chunkLOXOD4IScjs.t.call(void 0, "commands.ide.otherNotMatching", { count: String(nonMatching.size) })
419
+ )
420
+ );
421
+ console.log();
422
+ printNonMatchingIDEs([...nonMatching.values()]);
423
+ }
424
+ printExtensionSuggestions(detected);
425
+ return null;
426
+ }
427
+ console.log(
428
+ _chalk2.default.green(
429
+ _chunkLOXOD4IScjs.t.call(void 0, "commands.ide.foundMatching", { count: String(matching.length) })
430
+ )
431
+ );
432
+ console.log();
433
+ const options = matching.map((ide2) => ({
434
+ label: `${ide2.displayName}: ${_nullishCoalesce(ide2.workspacePath, () => ( _chunkLOXOD4IScjs.t.call(void 0, "common.unknown")))}`,
435
+ value: ide2.kind
436
+ }));
437
+ const result = await _chunkQRQ5EX7Icjs.showModal.call(void 0, {
438
+ title: _chunkLOXOD4IScjs.t.call(void 0, "commands.ide.selectPrompt"),
439
+ options
440
+ });
441
+ if (!result) {
442
+ console.log(_chalk2.default.gray(`
443
+ ${_chunkLOXOD4IScjs.t.call(void 0, "common.cancelled")}`));
444
+ return null;
445
+ }
446
+ const selected = matching.find((d) => d.kind === result.value);
447
+ if (selected) {
448
+ console.log(
449
+ _chalk2.default.green(
450
+ `
451
+ \u2713 ${_chunkLOXOD4IScjs.t.call(void 0, "commands.ide.connected", { ide: selected.displayName })}`
452
+ )
453
+ );
454
+ }
455
+ if (nonMatching.size > 0) {
456
+ console.log();
457
+ console.log(
458
+ _chalk2.default.gray(
459
+ _chunkLOXOD4IScjs.t.call(void 0, "commands.ide.otherNotMatching", { count: String(nonMatching.size) })
460
+ )
461
+ );
462
+ console.log();
463
+ printNonMatchingIDEs([...nonMatching.values()]);
464
+ }
465
+ printExtensionSuggestions(detected);
466
+ return null;
467
+ }
468
+ function printNonMatchingIDEs(ides) {
469
+ for (const ide2 of ides) {
470
+ const wsPath = _nullishCoalesce(ide2.workspacePath, () => ( _chunkLOXOD4IScjs.t.call(void 0, "common.unknown")));
471
+ console.log(_chalk2.default.gray(` \u2022 ${ide2.displayName}: ${wsPath}`));
472
+ }
473
+ console.log();
474
+ }
475
+ function printExtensionSuggestions(detected) {
476
+ const suggestions = getExtensionSuggestions(detected);
477
+ if (suggestions.length === 0) return;
478
+ console.log(_chalk2.default.dim(`\u{1F4A1} ${_chunkLOXOD4IScjs.t.call(void 0, "commands.ide.extensionHint")}`));
479
+ for (const suggestion of suggestions) {
480
+ const link = _terminallink2.default.call(void 0, suggestion.url, suggestion.url);
481
+ console.log(_chalk2.default.dim(` \u2022 ${suggestion.displayName}: ${link}`));
482
+ }
483
+ console.log();
484
+ }
485
+ var metadata = {
486
+ command: "/ide",
487
+ description: _chunkLOXOD4IScjs.t.call(void 0, "commands.ide.description"),
488
+ implemented: true
489
+ };
490
+
491
+
492
+
493
+
494
+ exports.ide = ide; exports.metadata = metadata;
495
+ /**
496
+ * @license
497
+ * Copyright 2025 Autohand AI LLC
498
+ * SPDX-License-Identifier: Apache-2.0
499
+ */
@@ -1,7 +1,15 @@
1
+ import {
2
+ showConfirm,
3
+ showInput,
4
+ showModal
5
+ } from "./chunk-PNSRJT46.js";
6
+ import {
7
+ t
8
+ } from "./chunk-UET7BDX2.js";
9
+
1
10
  // src/commands/export.ts
2
11
  import chalk from "chalk";
3
12
  import path2 from "path";
4
- import enquirer from "enquirer";
5
13
 
6
14
  // src/session/exportSession.ts
7
15
  import fs from "fs-extra";
@@ -74,7 +82,7 @@ function formatTimestamp(timestamp) {
74
82
  minute: "2-digit"
75
83
  });
76
84
  }
77
- function formatMessage(message, options, index) {
85
+ function formatMessage(message, options, _index) {
78
86
  const parts = [];
79
87
  const roleEmoji = {
80
88
  user: "\u{1F464}",
@@ -237,7 +245,7 @@ function getSuggestedFilename(metadata2, format) {
237
245
  // src/commands/export.ts
238
246
  var metadata = {
239
247
  command: "/export",
240
- description: "Export current session to markdown",
248
+ description: t("commands.export.description"),
241
249
  implemented: true
242
250
  };
243
251
  async function execute(args, context) {
@@ -253,22 +261,19 @@ async function execute(args, context) {
253
261
  console.log(chalk.yellow("No sessions found to export."));
254
262
  return;
255
263
  }
256
- const { Select: Select2 } = enquirer;
257
- const sessionPrompt = new Select2({
258
- name: "session",
259
- message: "Select a session to export:",
260
- choices: sessions.slice(0, 10).map((s) => ({
261
- name: s.sessionId,
262
- message: `${s.projectName} - ${new Date(s.createdAt).toLocaleString()} (${s.messageCount} messages)`
263
- }))
264
+ const sessionOptions = sessions.slice(0, 10).map((s) => ({
265
+ label: `${s.projectName} - ${new Date(s.createdAt).toLocaleString()} (${s.messageCount} messages)`,
266
+ value: s.sessionId
267
+ }));
268
+ const sessionResult = await showModal({
269
+ title: "Select a session to export:",
270
+ options: sessionOptions
264
271
  });
265
- try {
266
- const selectedId = await sessionPrompt.run();
267
- session = await sessionManager.loadSession(selectedId);
268
- } catch {
272
+ if (!sessionResult) {
269
273
  console.log(chalk.gray("Cancelled."));
270
274
  return;
271
275
  }
276
+ session = await sessionManager.loadSession(sessionResult.value);
272
277
  }
273
278
  const metadata2 = session.metadata;
274
279
  const messages = session.getMessages();
@@ -276,56 +281,37 @@ async function execute(args, context) {
276
281
  console.log(chalk.yellow("No messages in session to export."));
277
282
  return;
278
283
  }
279
- const { Select, Confirm, Input } = enquirer;
280
- const formatPrompt = new Select({
281
- name: "format",
282
- message: "Export format:",
283
- choices: [
284
- { name: "md", message: "Markdown (.md)" },
285
- { name: "json", message: "JSON (.json)" },
286
- { name: "html", message: "HTML (.html)" }
287
- ]
284
+ const formatOptions = [
285
+ { label: "Markdown (.md)", value: "md" },
286
+ { label: "JSON (.json)", value: "json" },
287
+ { label: "HTML (.html)", value: "html" }
288
+ ];
289
+ const formatResult = await showModal({
290
+ title: "Export format:",
291
+ options: formatOptions
288
292
  });
289
- let format;
290
- try {
291
- format = await formatPrompt.run();
292
- } catch {
293
+ if (!formatResult) {
293
294
  console.log(chalk.gray("Cancelled."));
294
295
  return;
295
296
  }
297
+ const format = formatResult.value;
296
298
  const options = {};
297
299
  if (format === "md" || format === "html") {
298
- const includeToolsPrompt = new Confirm({
299
- name: "includeTools",
300
- message: "Include tool outputs?",
301
- initial: true
300
+ options.includeToolOutputs = await showConfirm({
301
+ title: "Include tool outputs?",
302
+ defaultValue: true
302
303
  });
303
- try {
304
- options.includeToolOutputs = await includeToolsPrompt.run();
305
- } catch {
306
- options.includeToolOutputs = true;
307
- }
308
- const includeTocPrompt = new Confirm({
309
- name: "includeToc",
310
- message: "Include table of contents?",
311
- initial: false
304
+ options.includeToc = await showConfirm({
305
+ title: "Include table of contents?",
306
+ defaultValue: false
312
307
  });
313
- try {
314
- options.includeToc = await includeTocPrompt.run();
315
- } catch {
316
- options.includeToc = false;
317
- }
318
308
  }
319
309
  const suggestedFilename = getSuggestedFilename(metadata2, format);
320
- const filenamePrompt = new Input({
321
- name: "filename",
322
- message: "Save as:",
323
- initial: suggestedFilename
310
+ const filename = await showInput({
311
+ title: "Save as:",
312
+ defaultValue: suggestedFilename
324
313
  });
325
- let filename;
326
- try {
327
- filename = await filenamePrompt.run();
328
- } catch {
314
+ if (!filename) {
329
315
  console.log(chalk.gray("Cancelled."));
330
316
  return;
331
317
  }
@@ -345,12 +331,11 @@ async function execute(args, context) {
345
331
  try {
346
332
  await saveExport(content, filePath);
347
333
  console.log();
348
- console.log(chalk.green("Session exported successfully!"));
349
- console.log(chalk.cyan(` ${filePath}`));
334
+ console.log(chalk.green(t("commands.export.success", { path: filePath })));
350
335
  console.log(chalk.gray(` ${messages.length} messages, ${(Buffer.byteLength(content, "utf8") / 1024).toFixed(1)} KB`));
351
336
  console.log();
352
337
  } catch (error) {
353
- console.log(chalk.red(`Failed to save export: ${error.message}`));
338
+ console.log(chalk.red(t("commands.export.failed", { error: error.message })));
354
339
  }
355
340
  }
356
341