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
@@ -1,6 +1,9 @@
1
1
  import {
2
2
  package_default
3
- } from "./chunk-6KMAJTU3.js";
3
+ } from "./chunk-CUBYCLNL.js";
4
+ import {
5
+ t
6
+ } from "./chunk-UET7BDX2.js";
4
7
 
5
8
  // src/commands/status.ts
6
9
  import chalk from "chalk";
@@ -34,7 +37,8 @@ async function gatherStatusData(ctx) {
34
37
  sessionsCount: allSessions.length,
35
38
  contextPercentLeft: ctx.getContextPercentLeft?.() ?? 100,
36
39
  totalTokensUsed: ctx.getTotalTokensUsed?.() ?? 0,
37
- config: ctx.config
40
+ config: ctx.config,
41
+ contextCompactionEnabled: ctx.isContextCompactionEnabled?.() ?? true
38
42
  };
39
43
  }
40
44
  function renderStatusUI(data) {
@@ -154,17 +158,21 @@ function renderTabContent(tab, data) {
154
158
  }
155
159
  }
156
160
  function renderStatusTab(data) {
157
- console.log(chalk.bold("Version:"), data.version);
158
- console.log(chalk.bold("Session ID:"), data.sessionId ?? chalk.gray("none"));
159
- console.log(chalk.bold("cwd:"), data.cwd);
160
- console.log(chalk.bold("Provider:"), data.provider);
161
- console.log(chalk.bold("Model:"), data.model);
161
+ console.log(chalk.bold(`${t("commands.status.version")}:`), data.version);
162
+ console.log(chalk.bold(`${t("commands.status.sessionId")}:`), data.sessionId ?? chalk.gray("none"));
163
+ console.log(chalk.bold(`${t("commands.status.cwd")}:`), data.cwd);
164
+ console.log(chalk.bold(`${t("commands.status.provider")}:`), data.provider);
165
+ console.log(chalk.bold(`${t("commands.status.model")}:`), data.model);
166
+ console.log(
167
+ chalk.bold("Context Compaction:"),
168
+ data.contextCompactionEnabled ? chalk.green("ON") : chalk.yellow("OFF")
169
+ );
162
170
  console.log();
163
171
  console.log(
164
- chalk.bold("API Status:"),
165
- data.apiConnected ? chalk.green("Connected") : chalk.red("Disconnected")
172
+ chalk.bold(`${t("commands.status.apiStatus")}:`),
173
+ data.apiConnected ? chalk.green(t("commands.status.connected")) : chalk.red(t("commands.status.disconnected"))
166
174
  );
167
- console.log(chalk.bold("Sessions:"), `${data.sessionsCount} total`);
175
+ console.log(chalk.bold(`${t("commands.status.sessions")}:`), t("commands.status.total", { count: String(data.sessionsCount) }));
168
176
  console.log(chalk.bold("Memory:"), "user (~/.autohand/memory/), project (.autohand/memory/)");
169
177
  }
170
178
  function renderConfigTab(data) {
@@ -0,0 +1,380 @@
1
+ import {
2
+ I18nProvider,
3
+ useTranslation
4
+ } from "./chunk-NF7RIHJK.js";
5
+
6
+ // src/ui/ink/components/Modal.tsx
7
+ import { useState, useMemo, useCallback } from "react";
8
+ import { Box, Text, useInput, render } from "ink";
9
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
10
+ var OTHER_VALUE = "__other__";
11
+ function Modal(props) {
12
+ const { t } = useTranslation();
13
+ const { title, onCancel } = props;
14
+ const mode = "mode" in props ? props.mode : "select";
15
+ const [cursor, setCursor] = useState(0);
16
+ const [customInput, setCustomInput] = useState("");
17
+ const [isCustomMode, setIsCustomMode] = useState(false);
18
+ const [inputValue, setInputValue] = useState(() => {
19
+ if (mode === "input" && "defaultValue" in props && typeof props.defaultValue === "string") {
20
+ return props.defaultValue;
21
+ }
22
+ return "";
23
+ });
24
+ const [validationError, setValidationError] = useState(null);
25
+ const choices = useMemo(() => {
26
+ if (mode === "select" && "options" in props) {
27
+ const items = [...props.options];
28
+ if ("allowCustomInput" in props && props.allowCustomInput) {
29
+ items.push({
30
+ label: t("ui.questionOther"),
31
+ value: OTHER_VALUE,
32
+ disabled: false
33
+ });
34
+ }
35
+ return items;
36
+ }
37
+ if (mode === "confirm" && "confirmText" in props) {
38
+ const confirmText = props.confirmText ?? t("ui.confirmYes");
39
+ const cancelText = props.cancelText ?? t("ui.confirmNo");
40
+ return [
41
+ { label: confirmText, value: "yes", disabled: false },
42
+ { label: cancelText, value: "no", disabled: false }
43
+ ];
44
+ }
45
+ return [];
46
+ }, [mode, props, t]);
47
+ useState(() => {
48
+ if (mode === "confirm" && "defaultValue" in props) {
49
+ const defaultIdx = props.defaultValue === false ? 1 : 0;
50
+ setCursor(defaultIdx);
51
+ }
52
+ });
53
+ const hasNoChoices = mode === "select" && choices.length === 0;
54
+ const findNextEnabled = useCallback(
55
+ (from, direction) => {
56
+ const len = choices.length;
57
+ if (len === 0) return 0;
58
+ let next = (from + direction + len) % len;
59
+ let attempts = 0;
60
+ while (choices[next]?.disabled && attempts < len) {
61
+ next = (next + direction + len) % len;
62
+ attempts++;
63
+ }
64
+ return next;
65
+ },
66
+ [choices]
67
+ );
68
+ useInput((char, key) => {
69
+ if (key.escape) {
70
+ if (mode === "select" && isCustomMode) {
71
+ setIsCustomMode(false);
72
+ setCustomInput("");
73
+ } else {
74
+ onCancel?.();
75
+ }
76
+ return;
77
+ }
78
+ if (mode === "input" || mode === "password") {
79
+ if (key.return && "onSubmit" in props) {
80
+ if ("validate" in props && props.validate) {
81
+ const result = props.validate(inputValue);
82
+ if (result === true) {
83
+ props.onSubmit(inputValue);
84
+ } else if (typeof result === "string") {
85
+ setValidationError(result);
86
+ } else {
87
+ setValidationError(t("ui.validationError"));
88
+ }
89
+ } else {
90
+ props.onSubmit(inputValue);
91
+ }
92
+ return;
93
+ }
94
+ if (key.backspace || key.delete) {
95
+ setInputValue((prev) => prev.slice(0, -1));
96
+ setValidationError(null);
97
+ return;
98
+ }
99
+ if (char && !key.ctrl && !key.meta) {
100
+ setInputValue((prev) => prev + char);
101
+ setValidationError(null);
102
+ }
103
+ return;
104
+ }
105
+ if (mode === "select" && isCustomMode && "onSelect" in props) {
106
+ if (key.return) {
107
+ if (customInput.trim()) {
108
+ props.onSelect({
109
+ label: customInput,
110
+ value: customInput
111
+ });
112
+ }
113
+ return;
114
+ }
115
+ if (key.backspace || key.delete) {
116
+ setCustomInput((prev) => prev.slice(0, -1));
117
+ return;
118
+ }
119
+ if (char && !key.ctrl && !key.meta) {
120
+ setCustomInput((prev) => prev + char);
121
+ }
122
+ return;
123
+ }
124
+ if (key.return) {
125
+ const selected = choices[cursor];
126
+ if (selected?.disabled) {
127
+ return;
128
+ }
129
+ if (mode === "select" && "onSelect" in props) {
130
+ if (selected?.value === OTHER_VALUE) {
131
+ setIsCustomMode(true);
132
+ } else if (selected) {
133
+ props.onSelect(selected);
134
+ }
135
+ } else if (mode === "confirm" && "onConfirm" in props) {
136
+ props.onConfirm(selected?.value === "yes");
137
+ }
138
+ return;
139
+ }
140
+ if (key.upArrow) {
141
+ setCursor((prev) => findNextEnabled(prev, -1));
142
+ return;
143
+ }
144
+ if (key.downArrow) {
145
+ setCursor((prev) => findNextEnabled(prev, 1));
146
+ return;
147
+ }
148
+ if (char && char >= "1" && char <= "9") {
149
+ const index = parseInt(char, 10) - 1;
150
+ if (index < choices.length) {
151
+ const selected = choices[index];
152
+ if (selected?.disabled) {
153
+ return;
154
+ }
155
+ if (mode === "select" && "onSelect" in props) {
156
+ if (selected?.value === OTHER_VALUE) {
157
+ setIsCustomMode(true);
158
+ } else if (selected) {
159
+ props.onSelect(selected);
160
+ }
161
+ } else if (mode === "confirm" && "onConfirm" in props) {
162
+ props.onConfirm(selected?.value === "yes");
163
+ }
164
+ }
165
+ return;
166
+ }
167
+ });
168
+ const renderContent = () => {
169
+ if (mode === "input" || mode === "password") {
170
+ const displayValue = mode === "password" ? "\u2022".repeat(inputValue.length) : inputValue;
171
+ const placeholderText = "placeholder" in props && props.placeholder || (mode === "password" ? t("ui.passwordPlaceholder") : t("ui.inputPlaceholder"));
172
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
173
+ /* @__PURE__ */ jsxs(Box, { children: [
174
+ /* @__PURE__ */ jsx(Text, { color: "yellow", children: "> " }),
175
+ /* @__PURE__ */ jsx(Text, { children: displayValue || /* @__PURE__ */ jsx(Text, { color: "gray", children: placeholderText }) }),
176
+ /* @__PURE__ */ jsx(Text, { color: "gray", children: "\u2588" })
177
+ ] }),
178
+ validationError && /* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsx(Text, { color: "red", children: validationError }) })
179
+ ] });
180
+ }
181
+ if (mode === "select" && isCustomMode) {
182
+ return /* @__PURE__ */ jsxs(Box, { children: [
183
+ /* @__PURE__ */ jsxs(Text, { color: "yellow", children: [
184
+ t("ui.questionYourAnswer"),
185
+ ": "
186
+ ] }),
187
+ /* @__PURE__ */ jsx(Text, { children: customInput }),
188
+ /* @__PURE__ */ jsx(Text, { color: "gray", children: "\u2588" })
189
+ ] });
190
+ }
191
+ if (hasNoChoices) {
192
+ return /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(Text, { color: "gray", children: t("ui.noOptionsAvailable") }) });
193
+ }
194
+ return choices.map((choice, i) => {
195
+ const isSelected = i === cursor;
196
+ const isDisabled = choice.disabled;
197
+ let color;
198
+ if (isDisabled) {
199
+ color = "gray";
200
+ } else if (isSelected) {
201
+ color = "green";
202
+ }
203
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
204
+ /* @__PURE__ */ jsxs(Text, { color, children: [
205
+ isSelected ? "\u25B8 " : " ",
206
+ i + 1,
207
+ ". ",
208
+ choice.label,
209
+ isDisabled ? " (disabled)" : ""
210
+ ] }),
211
+ choice.description && /* @__PURE__ */ jsxs(Text, { color: "gray", children: [
212
+ " ",
213
+ choice.description
214
+ ] })
215
+ ] }, `${choice.value}-${i}`);
216
+ });
217
+ };
218
+ const renderHint = () => {
219
+ if (mode === "input" || mode === "password") {
220
+ return t("ui.inputHint");
221
+ }
222
+ if (mode === "select" && hasNoChoices) {
223
+ return t("common.pressEscToCancel");
224
+ }
225
+ if (mode === "select" && isCustomMode) {
226
+ return t("ui.questionCustomHint");
227
+ }
228
+ return t("ui.questionSelectHint");
229
+ };
230
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", paddingX: 1, children: [
231
+ /* @__PURE__ */ jsx(Text, { color: "cyan", children: title }),
232
+ /* @__PURE__ */ jsx(Text, { children: " " }),
233
+ renderContent(),
234
+ /* @__PURE__ */ jsx(Text, { children: " " }),
235
+ /* @__PURE__ */ jsx(Text, { color: "gray", children: renderHint() })
236
+ ] });
237
+ }
238
+ async function showModal(options) {
239
+ const { title, options: modalOptions, allowCustomInput, multiSelect } = options;
240
+ if (!process.stdout.isTTY) {
241
+ return null;
242
+ }
243
+ return new Promise((resolve) => {
244
+ let completed = false;
245
+ const instance = render(
246
+ /* @__PURE__ */ jsx(I18nProvider, { children: /* @__PURE__ */ jsx(
247
+ Modal,
248
+ {
249
+ title,
250
+ options: modalOptions,
251
+ allowCustomInput,
252
+ multiSelect,
253
+ onSelect: (option) => {
254
+ if (completed) return;
255
+ completed = true;
256
+ instance.unmount();
257
+ resolve(option);
258
+ },
259
+ onCancel: () => {
260
+ if (completed) return;
261
+ completed = true;
262
+ instance.unmount();
263
+ resolve(null);
264
+ }
265
+ }
266
+ ) }),
267
+ { exitOnCtrlC: false }
268
+ );
269
+ });
270
+ }
271
+ async function showConfirm(options) {
272
+ if (!process.stdout.isTTY) {
273
+ return false;
274
+ }
275
+ return new Promise((resolve) => {
276
+ let completed = false;
277
+ const instance = render(
278
+ /* @__PURE__ */ jsx(I18nProvider, { children: /* @__PURE__ */ jsx(
279
+ Modal,
280
+ {
281
+ mode: "confirm",
282
+ title: options.title,
283
+ confirmText: options.confirmText,
284
+ cancelText: options.cancelText,
285
+ defaultValue: options.defaultValue,
286
+ onConfirm: (confirmed) => {
287
+ if (completed) return;
288
+ completed = true;
289
+ instance.unmount();
290
+ resolve(confirmed);
291
+ },
292
+ onCancel: () => {
293
+ if (completed) return;
294
+ completed = true;
295
+ instance.unmount();
296
+ resolve(false);
297
+ }
298
+ }
299
+ ) }),
300
+ { exitOnCtrlC: false }
301
+ );
302
+ });
303
+ }
304
+ async function showInput(options) {
305
+ if (!process.stdout.isTTY) {
306
+ return null;
307
+ }
308
+ return new Promise((resolve) => {
309
+ let completed = false;
310
+ const instance = render(
311
+ /* @__PURE__ */ jsx(I18nProvider, { children: /* @__PURE__ */ jsx(
312
+ Modal,
313
+ {
314
+ mode: "input",
315
+ title: options.title,
316
+ placeholder: options.placeholder,
317
+ defaultValue: options.defaultValue,
318
+ validate: options.validate,
319
+ onSubmit: (value) => {
320
+ if (completed) return;
321
+ completed = true;
322
+ instance.unmount();
323
+ resolve(value);
324
+ },
325
+ onCancel: () => {
326
+ if (completed) return;
327
+ completed = true;
328
+ instance.unmount();
329
+ resolve(null);
330
+ }
331
+ }
332
+ ) }),
333
+ { exitOnCtrlC: false }
334
+ );
335
+ });
336
+ }
337
+ async function showPassword(options) {
338
+ if (!process.stdout.isTTY) {
339
+ return null;
340
+ }
341
+ return new Promise((resolve) => {
342
+ let completed = false;
343
+ const instance = render(
344
+ /* @__PURE__ */ jsx(I18nProvider, { children: /* @__PURE__ */ jsx(
345
+ Modal,
346
+ {
347
+ mode: "password",
348
+ title: options.title,
349
+ placeholder: options.placeholder,
350
+ validate: options.validate,
351
+ onSubmit: (value) => {
352
+ if (completed) return;
353
+ completed = true;
354
+ instance.unmount();
355
+ resolve(value);
356
+ },
357
+ onCancel: () => {
358
+ if (completed) return;
359
+ completed = true;
360
+ instance.unmount();
361
+ resolve(null);
362
+ }
363
+ }
364
+ ) }),
365
+ { exitOnCtrlC: false }
366
+ );
367
+ });
368
+ }
369
+
370
+ export {
371
+ showModal,
372
+ showConfirm,
373
+ showInput,
374
+ showPassword
375
+ };
376
+ /**
377
+ * @license
378
+ * Copyright 2025 Autohand AI LLC
379
+ * SPDX-License-Identifier: Apache-2.0
380
+ */
@@ -1,7 +1,15 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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; }// src/commands/export.ts
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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
+
4
+
5
+ var _chunkQRQ5EX7Icjs = require('./chunk-QRQ5EX7I.cjs');
6
+
7
+
8
+ var _chunkLOXOD4IScjs = require('./chunk-LOXOD4IS.cjs');
9
+
10
+ // src/commands/export.ts
2
11
  var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
3
12
  var _path = require('path'); var _path2 = _interopRequireDefault(_path);
4
- var _enquirer = require('enquirer'); var _enquirer2 = _interopRequireDefault(_enquirer);
5
13
 
6
14
  // src/session/exportSession.ts
7
15
  var _fsextra = require('fs-extra'); var _fsextra2 = _interopRequireDefault(_fsextra);
@@ -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: _chunkLOXOD4IScjs.t.call(void 0, "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(_chalk2.default.yellow("No sessions found to export."));
254
262
  return;
255
263
  }
256
- const { Select: Select2 } = _enquirer2.default;
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 _chunkQRQ5EX7Icjs.showModal.call(void 0, {
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 (e) {
272
+ if (!sessionResult) {
269
273
  console.log(_chalk2.default.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(_chalk2.default.yellow("No messages in session to export."));
277
282
  return;
278
283
  }
279
- const { Select, Confirm, Input } = _enquirer2.default;
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 _chunkQRQ5EX7Icjs.showModal.call(void 0, {
290
+ title: "Export format:",
291
+ options: formatOptions
288
292
  });
289
- let format;
290
- try {
291
- format = await formatPrompt.run();
292
- } catch (e2) {
293
+ if (!formatResult) {
293
294
  console.log(_chalk2.default.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 _chunkQRQ5EX7Icjs.showConfirm.call(void 0, {
301
+ title: "Include tool outputs?",
302
+ defaultValue: true
302
303
  });
303
- try {
304
- options.includeToolOutputs = await includeToolsPrompt.run();
305
- } catch (e3) {
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 _chunkQRQ5EX7Icjs.showConfirm.call(void 0, {
305
+ title: "Include table of contents?",
306
+ defaultValue: false
312
307
  });
313
- try {
314
- options.includeToc = await includeTocPrompt.run();
315
- } catch (e4) {
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 _chunkQRQ5EX7Icjs.showInput.call(void 0, {
311
+ title: "Save as:",
312
+ defaultValue: suggestedFilename
324
313
  });
325
- let filename;
326
- try {
327
- filename = await filenamePrompt.run();
328
- } catch (e5) {
314
+ if (!filename) {
329
315
  console.log(_chalk2.default.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(_chalk2.default.green("Session exported successfully!"));
349
- console.log(_chalk2.default.cyan(` ${filePath}`));
334
+ console.log(_chalk2.default.green(_chunkLOXOD4IScjs.t.call(void 0, "commands.export.success", { path: filePath })));
350
335
  console.log(_chalk2.default.gray(` ${messages.length} messages, ${(Buffer.byteLength(content, "utf8") / 1024).toFixed(1)} KB`));
351
336
  console.log();
352
337
  } catch (error) {
353
- console.log(_chalk2.default.red(`Failed to save export: ${error.message}`));
338
+ console.log(_chalk2.default.red(_chunkLOXOD4IScjs.t.call(void 0, "commands.export.failed", { error: error.message })));
354
339
  }
355
340
  }
356
341
 
@@ -22,7 +22,11 @@ var AUTOHAND_PATHS = {
22
22
  /** Custom tools */
23
23
  tools: path.join(AUTOHAND_HOME, "tools"),
24
24
  /** Skills (instruction packages) */
25
- skills: path.join(AUTOHAND_HOME, "skills")
25
+ skills: path.join(AUTOHAND_HOME, "skills"),
26
+ /** Plan files for plan mode */
27
+ plans: path.join(AUTOHAND_HOME, "plans"),
28
+ /** MCP community registry cache */
29
+ mcpCache: path.join(AUTOHAND_HOME, "community-mcp", "cache")
26
30
  };
27
31
  var AUTOHAND_FILES = {
28
32
  /** Main config file */
@@ -1,3 +1,7 @@
1
+ import {
2
+ t
3
+ } from "./chunk-UET7BDX2.js";
4
+
1
5
  // src/commands/add-dir.ts
2
6
  import chalk2 from "chalk";
3
7
  import fs2 from "fs-extra";
@@ -282,7 +286,7 @@ async function addDir(ctx, args) {
282
286
  }
283
287
  const resolvedPath = path2.resolve(dirPath);
284
288
  if (!await fs2.pathExists(resolvedPath)) {
285
- console.log(chalk2.red(`Error: Directory does not exist: ${dirPath}`));
289
+ console.log(chalk2.red(t("commands.addDir.notFound", { path: dirPath })));
286
290
  return null;
287
291
  }
288
292
  const stats = await fs2.stat(resolvedPath);
@@ -301,17 +305,17 @@ async function addDir(ctx, args) {
301
305
  return null;
302
306
  }
303
307
  if (ctx.additionalDirs.includes(resolvedPath)) {
304
- console.log(chalk2.yellow(`Directory already added: ${resolvedPath}`));
308
+ console.log(chalk2.yellow(t("commands.addDir.alreadyAdded", { path: resolvedPath })));
305
309
  return null;
306
310
  }
307
311
  ctx.addAdditionalDir(resolvedPath);
308
- console.log(chalk2.green(`Added directory: ${resolvedPath}`));
312
+ console.log(chalk2.green(t("commands.addDir.added", { path: resolvedPath })));
309
313
  console.log(chalk2.gray("You can now read, write, and modify files in this directory."));
310
314
  return null;
311
315
  }
312
316
  var metadata = {
313
317
  command: "/add-dir",
314
- description: "add additional directories to workspace scope",
318
+ description: t("commands.addDir.description"),
315
319
  implemented: true
316
320
  };
317
321