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
+ import {
2
+ showModal
3
+ } from "./chunk-PNSRJT46.js";
4
+
1
5
  // src/commands/completion.ts
2
6
  import chalk2 from "chalk";
3
- import enquirer from "enquirer";
4
7
 
5
8
  // src/completions/index.ts
6
9
  import fs from "fs-extra";
@@ -276,58 +279,55 @@ async function execute(args) {
276
279
  if (detected) {
277
280
  console.log(chalk2.gray(`Detected shell: ${detected}`));
278
281
  }
279
- const { Select: Select2 } = enquirer;
280
- const prompt = new Select2({
281
- name: "shell",
282
- message: "Select your shell:",
283
- choices: [
284
- { name: "bash", message: "Bash" },
285
- { name: "zsh", message: "Zsh" },
286
- { name: "fish", message: "Fish" }
287
- ],
288
- initial: detected || "bash"
282
+ const shellOptions = [
283
+ { label: "Bash", value: "bash" },
284
+ { label: "Zsh", value: "zsh" },
285
+ { label: "Fish", value: "fish" }
286
+ ];
287
+ const shellResult = await showModal({
288
+ title: "Select your shell:",
289
+ options: shellOptions,
290
+ initialIndex: shellOptions.findIndex((o) => o.value === (detected || "bash"))
289
291
  });
290
- try {
291
- shell = await prompt.run();
292
- } catch {
292
+ if (!shellResult) {
293
293
  console.log(chalk2.gray("Cancelled."));
294
294
  return;
295
295
  }
296
+ shell = shellResult.value;
296
297
  }
297
- const { Select } = enquirer;
298
- const actionPrompt = new Select({
299
- name: "action",
300
- message: "What would you like to do?",
301
- choices: [
302
- { name: "print", message: "Print completion script to terminal" },
303
- { name: "install", message: "Install completion to default location" },
304
- { name: "instructions", message: "Show installation instructions" }
305
- ]
298
+ const actionOptions = [
299
+ { label: "Print completion script to terminal", value: "print" },
300
+ { label: "Install completion to default location", value: "install" },
301
+ { label: "Show installation instructions", value: "instructions" }
302
+ ];
303
+ const actionResult = await showModal({
304
+ title: "What would you like to do?",
305
+ options: actionOptions
306
306
  });
307
- try {
308
- const action = await actionPrompt.run();
309
- switch (action) {
310
- case "print":
311
- console.log();
312
- console.log(chalk2.cyan(`# ${shell} completion script for autohand`));
313
- console.log(chalk2.cyan("# Copy and save to appropriate location"));
314
- console.log();
315
- console.log(generateCompletion(shell));
316
- break;
317
- case "install":
318
- const installPath = await installCompletion(shell);
319
- console.log();
320
- console.log(chalk2.green("Completion script installed to:"));
321
- console.log(chalk2.cyan(` ${installPath}`));
322
- console.log();
323
- console.log(getInstallInstructions(shell));
324
- break;
325
- case "instructions":
326
- console.log(getInstallInstructions(shell));
327
- break;
328
- }
329
- } catch {
307
+ if (!actionResult) {
330
308
  console.log(chalk2.gray("Cancelled."));
309
+ return;
310
+ }
311
+ const action = actionResult.value;
312
+ switch (action) {
313
+ case "print":
314
+ console.log();
315
+ console.log(chalk2.cyan(`# ${shell} completion script for autohand`));
316
+ console.log(chalk2.cyan("# Copy and save to appropriate location"));
317
+ console.log();
318
+ console.log(generateCompletion(shell));
319
+ break;
320
+ case "install":
321
+ const installPath = await installCompletion(shell);
322
+ console.log();
323
+ console.log(chalk2.green("Completion script installed to:"));
324
+ console.log(chalk2.cyan(` ${installPath}`));
325
+ console.log();
326
+ console.log(getInstallInstructions(shell));
327
+ break;
328
+ case "instructions":
329
+ console.log(getInstallInstructions(shell));
330
+ break;
331
331
  }
332
332
  }
333
333
  async function runCompletionCommand(shell) {
@@ -1,6 +1,9 @@
1
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
2
 
3
- var _chunkPMMSDR44cjs = require('./chunk-PMMSDR44.cjs');
3
+ var _chunkGIZL57FEcjs = require('./chunk-GIZL57FE.cjs');
4
+
5
+
6
+ var _chunkLOXOD4IScjs = require('./chunk-LOXOD4IS.cjs');
4
7
 
5
8
  // src/commands/agents.ts
6
9
  var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
@@ -20,7 +23,7 @@ var AgentRegistry = class _AgentRegistry {
20
23
  constructor() {
21
24
  this.agents = /* @__PURE__ */ new Map();
22
25
  this.externalPaths = [];
23
- this.agentsDir = _chunkPMMSDR44cjs.AUTOHAND_PATHS.agents;
26
+ this.agentsDir = _chunkGIZL57FEcjs.AUTOHAND_PATHS.agents;
24
27
  }
25
28
  static getInstance() {
26
29
  if (!_AgentRegistry.instance) {
@@ -152,7 +155,7 @@ function extractMarkdownTitle(content) {
152
155
  // src/commands/agents.ts
153
156
  var metadata = {
154
157
  command: "/agents",
155
- description: "list available sub-agents (markdown or json)",
158
+ description: _chunkLOXOD4IScjs.t.call(void 0, "commands.agents.description"),
156
159
  implemented: true,
157
160
  prd: "prd/sub_agents_architecture.md"
158
161
  };
@@ -161,10 +164,12 @@ async function handler() {
161
164
  await registry.loadAgents();
162
165
  const agents = registry.getAllAgents();
163
166
  if (agents.length === 0) {
164
- return `No agents found in ${_chalk2.default.cyan(registry.getAgentsDirectory())}.
165
- Create a markdown file (e.g., helper.md) there to define a new sub-agent.`;
167
+ return `${_chunkLOXOD4IScjs.t.call(void 0, "commands.agents.noAgents")}
168
+ ${_chalk2.default.gray(`Path: ${_chalk2.default.cyan(registry.getAgentsDirectory())}`)}`;
166
169
  }
167
- let output = _chalk2.default.bold("Available Agents:\n\n");
170
+ let output = _chalk2.default.bold(`${_chunkLOXOD4IScjs.t.call(void 0, "commands.agents.title")}:
171
+
172
+ `);
168
173
  for (const agent of agents) {
169
174
  output += `${_chalk2.default.green("\u{1F916} " + agent.name)}
170
175
  `;
@@ -0,0 +1,380 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); 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
+
4
+ var _chunkY27LG4BQcjs = require('./chunk-Y27LG4BQ.cjs');
5
+
6
+ // src/ui/ink/components/Modal.tsx
7
+ var _react = require('react');
8
+ var _ink = require('ink');
9
+ var _jsxruntime = require('react/jsx-runtime');
10
+ var OTHER_VALUE = "__other__";
11
+ function Modal(props) {
12
+ const { t } = _chunkY27LG4BQcjs.useTranslation.call(void 0, );
13
+ const { title, onCancel } = props;
14
+ const mode = "mode" in props ? props.mode : "select";
15
+ const [cursor, setCursor] = _react.useState.call(void 0, 0);
16
+ const [customInput, setCustomInput] = _react.useState.call(void 0, "");
17
+ const [isCustomMode, setIsCustomMode] = _react.useState.call(void 0, false);
18
+ const [inputValue, setInputValue] = _react.useState.call(void 0, () => {
19
+ if (mode === "input" && "defaultValue" in props && typeof props.defaultValue === "string") {
20
+ return props.defaultValue;
21
+ }
22
+ return "";
23
+ });
24
+ const [validationError, setValidationError] = _react.useState.call(void 0, null);
25
+ const choices = _react.useMemo.call(void 0, () => {
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 = _nullishCoalesce(props.confirmText, () => ( t("ui.confirmYes")));
39
+ const cancelText = _nullishCoalesce(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
+ _react.useState.call(void 0, () => {
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 = _react.useCallback.call(void 0,
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 (_optionalChain([choices, 'access', _ => _[next], 'optionalAccess', _2 => _2.disabled]) && attempts < len) {
61
+ next = (next + direction + len) % len;
62
+ attempts++;
63
+ }
64
+ return next;
65
+ },
66
+ [choices]
67
+ );
68
+ _ink.useInput.call(void 0, (char, key) => {
69
+ if (key.escape) {
70
+ if (mode === "select" && isCustomMode) {
71
+ setIsCustomMode(false);
72
+ setCustomInput("");
73
+ } else {
74
+ _optionalChain([onCancel, 'optionalCall', _3 => _3()]);
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 (_optionalChain([selected, 'optionalAccess', _4 => _4.disabled])) {
127
+ return;
128
+ }
129
+ if (mode === "select" && "onSelect" in props) {
130
+ if (_optionalChain([selected, 'optionalAccess', _5 => _5.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(_optionalChain([selected, 'optionalAccess', _6 => _6.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 (_optionalChain([selected, 'optionalAccess', _7 => _7.disabled])) {
153
+ return;
154
+ }
155
+ if (mode === "select" && "onSelect" in props) {
156
+ if (_optionalChain([selected, 'optionalAccess', _8 => _8.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(_optionalChain([selected, 'optionalAccess', _9 => _9.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__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
173
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _ink.Box, { children: [
174
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ink.Text, { color: "yellow", children: "> " }),
175
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ink.Text, { children: displayValue || /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ink.Text, { color: "gray", children: placeholderText }) }),
176
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ink.Text, { color: "gray", children: "\u2588" })
177
+ ] }),
178
+ validationError && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ink.Box, { marginTop: 1, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ink.Text, { color: "red", children: validationError }) })
179
+ ] });
180
+ }
181
+ if (mode === "select" && isCustomMode) {
182
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _ink.Box, { children: [
183
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _ink.Text, { color: "yellow", children: [
184
+ t("ui.questionYourAnswer"),
185
+ ": "
186
+ ] }),
187
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ink.Text, { children: customInput }),
188
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ink.Text, { color: "gray", children: "\u2588" })
189
+ ] });
190
+ }
191
+ if (hasNoChoices) {
192
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ink.Box, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ink.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__ */ _jsxruntime.jsxs.call(void 0, _ink.Box, { flexDirection: "column", children: [
204
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _ink.Text, { color, children: [
205
+ isSelected ? "\u25B8 " : " ",
206
+ i + 1,
207
+ ". ",
208
+ choice.label,
209
+ isDisabled ? " (disabled)" : ""
210
+ ] }),
211
+ choice.description && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _ink.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__ */ _jsxruntime.jsxs.call(void 0, _ink.Box, { flexDirection: "column", paddingX: 1, children: [
231
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ink.Text, { color: "cyan", children: title }),
232
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ink.Text, { children: " " }),
233
+ renderContent(),
234
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ink.Text, { children: " " }),
235
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _ink.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 = _ink.render.call(void 0,
246
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkY27LG4BQcjs.I18nProvider, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
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 = _ink.render.call(void 0,
278
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkY27LG4BQcjs.I18nProvider, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
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 = _ink.render.call(void 0,
311
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkY27LG4BQcjs.I18nProvider, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
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 = _ink.render.call(void 0,
344
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkY27LG4BQcjs.I18nProvider, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
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
+
371
+
372
+
373
+
374
+
375
+ exports.showModal = showModal; exports.showConfirm = showConfirm; exports.showInput = showInput; exports.showPassword = showPassword;
376
+ /**
377
+ * @license
378
+ * Copyright 2025 Autohand AI LLC
379
+ * SPDX-License-Identifier: Apache-2.0
380
+ */
@@ -1,6 +1,9 @@
1
1
  import {
2
2
  safePrompt
3
- } from "./chunk-7BYSXAKS.js";
3
+ } from "./chunk-WD5ZF6HE.js";
4
+ import {
5
+ t
6
+ } from "./chunk-UET7BDX2.js";
4
7
 
5
8
  // src/commands/permissions.ts
6
9
  import chalk from "chalk";
@@ -9,9 +12,9 @@ async function permissions(ctx) {
9
12
  const blacklist = ctx.permissionManager.getBlacklist();
10
13
  const settings = ctx.permissionManager.getSettings();
11
14
  console.log();
12
- console.log(chalk.bold.cyan("Permissions"));
15
+ console.log(chalk.bold.cyan(t("commands.permissions.title")));
13
16
  console.log(chalk.gray("\u2500".repeat(50)));
14
- console.log(chalk.gray(`Mode: ${settings.mode || "interactive"}`));
17
+ console.log(chalk.gray(t("commands.permissions.mode", { mode: settings.mode || "interactive" })));
15
18
  console.log();
16
19
  if (whitelist.length === 0 && blacklist.length === 0) {
17
20
  console.log(chalk.gray("No saved permissions yet."));
@@ -21,7 +24,7 @@ async function permissions(ctx) {
21
24
  return null;
22
25
  }
23
26
  if (whitelist.length > 0) {
24
- console.log(chalk.bold.green("Approved (Whitelist)"));
27
+ console.log(chalk.bold.green(t("commands.permissions.allowed")));
25
28
  console.log();
26
29
  whitelist.forEach((pattern, index) => {
27
30
  console.log(chalk.green(` ${index + 1}. ${pattern}`));
@@ -29,7 +32,7 @@ async function permissions(ctx) {
29
32
  console.log();
30
33
  }
31
34
  if (blacklist.length > 0) {
32
- console.log(chalk.bold.red("Denied (Blacklist)"));
35
+ console.log(chalk.bold.red(t("commands.permissions.denied")));
33
36
  console.log();
34
37
  blacklist.forEach((pattern, index) => {
35
38
  console.log(chalk.red(` ${index + 1}. ${pattern}`));
@@ -97,7 +100,7 @@ async function permissions(ctx) {
97
100
  }
98
101
  var metadata = {
99
102
  command: "/permissions",
100
- description: "view and manage tool/command approvals",
103
+ description: t("commands.permissions.description"),
101
104
  implemented: true
102
105
  };
103
106