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
@@ -3,10 +3,10 @@
3
3
  var _chunkJHGIWNHLcjs = require('./chunk-JHGIWNHL.cjs');
4
4
 
5
5
 
6
- var _chunk3HPUOQJNcjs = require('./chunk-3HPUOQJN.cjs');
6
+ var _chunkMNCWB5F7cjs = require('./chunk-MNCWB5F7.cjs');
7
7
 
8
8
 
9
- var _chunkPMMSDR44cjs = require('./chunk-PMMSDR44.cjs');
9
+ var _chunkGIZL57FEcjs = require('./chunk-GIZL57FE.cjs');
10
10
 
11
11
  // src/commands/skills-new.ts
12
12
  var _path = require('path'); var _path2 = _interopRequireDefault(_path);
@@ -25,7 +25,7 @@ async function createSkill(ctx) {
25
25
  console.log(_chalk2.default.red("Skills registry not available."));
26
26
  return null;
27
27
  }
28
- const answers = await _chunk3HPUOQJNcjs.safePrompt.call(void 0, [
28
+ const answers = await _chunkMNCWB5F7cjs.safePrompt.call(void 0, [
29
29
  {
30
30
  type: "input",
31
31
  name: "name",
@@ -65,7 +65,7 @@ async function createSkill(ctx) {
65
65
  console.log(_chalk2.default.gray("Canceled: no name provided."));
66
66
  return null;
67
67
  }
68
- const storageResult = await _chunk3HPUOQJNcjs.safePrompt.call(void 0, {
68
+ const storageResult = await _chunkMNCWB5F7cjs.safePrompt.call(void 0, {
69
69
  type: "select",
70
70
  name: "level",
71
71
  message: "Where should this skill be saved?",
@@ -81,7 +81,7 @@ async function createSkill(ctx) {
81
81
  const storageLevel = storageResult.level;
82
82
  if (skillsRegistry.hasSkill(name)) {
83
83
  console.log(_chalk2.default.yellow(`A skill named "${name}" already exists.`));
84
- const result = await _chunk3HPUOQJNcjs.safePrompt.call(void 0, {
84
+ const result = await _chunkMNCWB5F7cjs.safePrompt.call(void 0, {
85
85
  type: "confirm",
86
86
  name: "overwrite",
87
87
  message: "Do you want to overwrite it?",
@@ -100,7 +100,7 @@ async function createSkill(ctx) {
100
100
  console.log(_chalk2.default.gray(` Similarity: ${(match.score * 100).toFixed(0)}%`));
101
101
  }
102
102
  console.log();
103
- const result = await _chunk3HPUOQJNcjs.safePrompt.call(void 0, {
103
+ const result = await _chunkMNCWB5F7cjs.safePrompt.call(void 0, {
104
104
  type: "select",
105
105
  name: "proceed",
106
106
  message: "How would you like to proceed?",
@@ -150,7 +150,7 @@ Output only the raw markdown content, no code fences.`
150
150
  console.log(content.length > 800 ? content.slice(0, 800) + "\n...(truncated)" : content);
151
151
  console.log(_chalk2.default.gray("\u2500".repeat(50)));
152
152
  console.log();
153
- const confirmResult = await _chunk3HPUOQJNcjs.safePrompt.call(void 0, {
153
+ const confirmResult = await _chunkMNCWB5F7cjs.safePrompt.call(void 0, {
154
154
  type: "confirm",
155
155
  name: "confirm",
156
156
  message: "Save this skill?",
@@ -160,7 +160,7 @@ Output only the raw markdown content, no code fences.`
160
160
  console.log(_chalk2.default.gray("Canceled."));
161
161
  return null;
162
162
  }
163
- const baseDir = storageLevel === "project" ? _path2.default.join(ctx.workspaceRoot, ".autohand", "skills") : _chunkPMMSDR44cjs.AUTOHAND_PATHS.skills;
163
+ const baseDir = storageLevel === "project" ? _path2.default.join(ctx.workspaceRoot, ".autohand", "skills") : _chunkGIZL57FEcjs.AUTOHAND_PATHS.skills;
164
164
  const skillDir = _path2.default.join(baseDir, name);
165
165
  const skillPath = _path2.default.join(skillDir, "SKILL.md");
166
166
  try {
@@ -169,7 +169,7 @@ Output only the raw markdown content, no code fences.`
169
169
  console.log(_chalk2.default.green(`\u2713 Saved new skill to ${skillPath}`));
170
170
  const success = await skillsRegistry.saveSkill(name, content);
171
171
  if (success) {
172
- const activateResult = await _chunk3HPUOQJNcjs.safePrompt.call(void 0, {
172
+ const activateResult = await _chunkMNCWB5F7cjs.safePrompt.call(void 0, {
173
173
  type: "confirm",
174
174
  name: "activate",
175
175
  message: "Activate this skill now?",
@@ -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 _chunk3HPUOQJNcjs = require('./chunk-3HPUOQJN.cjs');
3
+ var _chunkMNCWB5F7cjs = require('./chunk-MNCWB5F7.cjs');
4
+
5
+
6
+ var _chunkLOXOD4IScjs = require('./chunk-LOXOD4IS.cjs');
4
7
 
5
8
  // src/commands/permissions.ts
6
9
  var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_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(_chalk2.default.bold.cyan("Permissions"));
15
+ console.log(_chalk2.default.bold.cyan(_chunkLOXOD4IScjs.t.call(void 0, "commands.permissions.title")));
13
16
  console.log(_chalk2.default.gray("\u2500".repeat(50)));
14
- console.log(_chalk2.default.gray(`Mode: ${settings.mode || "interactive"}`));
17
+ console.log(_chalk2.default.gray(_chunkLOXOD4IScjs.t.call(void 0, "commands.permissions.mode", { mode: settings.mode || "interactive" })));
15
18
  console.log();
16
19
  if (whitelist.length === 0 && blacklist.length === 0) {
17
20
  console.log(_chalk2.default.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(_chalk2.default.bold.green("Approved (Whitelist)"));
27
+ console.log(_chalk2.default.bold.green(_chunkLOXOD4IScjs.t.call(void 0, "commands.permissions.allowed")));
25
28
  console.log();
26
29
  whitelist.forEach((pattern, index) => {
27
30
  console.log(_chalk2.default.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(_chalk2.default.bold.red("Denied (Blacklist)"));
35
+ console.log(_chalk2.default.bold.red(_chunkLOXOD4IScjs.t.call(void 0, "commands.permissions.denied")));
33
36
  console.log();
34
37
  blacklist.forEach((pattern, index) => {
35
38
  console.log(_chalk2.default.red(` ${index + 1}. ${pattern}`));
@@ -39,7 +42,7 @@ async function permissions(ctx) {
39
42
  console.log(_chalk2.default.gray("\u2500".repeat(50)));
40
43
  console.log(_chalk2.default.gray(`Total: ${whitelist.length} approved, ${blacklist.length} denied`));
41
44
  console.log();
42
- const actionResult = await _chunk3HPUOQJNcjs.safePrompt.call(void 0, {
45
+ const actionResult = await _chunkMNCWB5F7cjs.safePrompt.call(void 0, {
43
46
  type: "select",
44
47
  name: "action",
45
48
  message: "What would you like to do?",
@@ -55,7 +58,7 @@ async function permissions(ctx) {
55
58
  }
56
59
  const { action } = actionResult;
57
60
  if (action === "remove_approved" && whitelist.length > 0) {
58
- const result = await _chunk3HPUOQJNcjs.safePrompt.call(void 0, {
61
+ const result = await _chunkMNCWB5F7cjs.safePrompt.call(void 0, {
59
62
  type: "select",
60
63
  name: "pattern",
61
64
  message: "Select item to remove from approved list:",
@@ -66,7 +69,7 @@ async function permissions(ctx) {
66
69
  console.log(_chalk2.default.yellow(`Removed "${result.pattern}" from approved list.`));
67
70
  }
68
71
  } else if (action === "remove_denied" && blacklist.length > 0) {
69
- const result = await _chunk3HPUOQJNcjs.safePrompt.call(void 0, {
72
+ const result = await _chunkMNCWB5F7cjs.safePrompt.call(void 0, {
70
73
  type: "select",
71
74
  name: "pattern",
72
75
  message: "Select item to remove from denied list:",
@@ -77,7 +80,7 @@ async function permissions(ctx) {
77
80
  console.log(_chalk2.default.yellow(`Removed "${result.pattern}" from denied list.`));
78
81
  }
79
82
  } else if (action === "clear_all") {
80
- const result = await _chunk3HPUOQJNcjs.safePrompt.call(void 0, {
83
+ const result = await _chunkMNCWB5F7cjs.safePrompt.call(void 0, {
81
84
  type: "confirm",
82
85
  name: "confirm",
83
86
  message: "Clear all saved permissions? This cannot be undone.",
@@ -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: _chunkLOXOD4IScjs.t.call(void 0, "commands.permissions.description"),
101
104
  implemented: true
102
105
  };
103
106
 
@@ -1,6 +1,9 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }// src/commands/completion.ts
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
+
3
+ var _chunkQRQ5EX7Icjs = require('./chunk-QRQ5EX7I.cjs');
4
+
5
+ // src/commands/completion.ts
2
6
  var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
3
- var _enquirer = require('enquirer'); var _enquirer2 = _interopRequireDefault(_enquirer);
4
7
 
5
8
  // src/completions/index.ts
6
9
  var _fsextra = require('fs-extra'); var _fsextra2 = _interopRequireDefault(_fsextra);
@@ -276,58 +279,55 @@ async function execute(args) {
276
279
  if (detected) {
277
280
  console.log(_chalk2.default.gray(`Detected shell: ${detected}`));
278
281
  }
279
- const { Select: Select2 } = _enquirer2.default;
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 _chunkQRQ5EX7Icjs.showModal.call(void 0, {
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 (e) {
292
+ if (!shellResult) {
293
293
  console.log(_chalk2.default.gray("Cancelled."));
294
294
  return;
295
295
  }
296
+ shell = shellResult.value;
296
297
  }
297
- const { Select } = _enquirer2.default;
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 _chunkQRQ5EX7Icjs.showModal.call(void 0, {
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.default.cyan(`# ${shell} completion script for autohand`));
313
- console.log(_chalk2.default.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.default.green("Completion script installed to:"));
321
- console.log(_chalk2.default.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 (e2) {
307
+ if (!actionResult) {
330
308
  console.log(_chalk2.default.gray("Cancelled."));
309
+ return;
310
+ }
311
+ const action = actionResult.value;
312
+ switch (action) {
313
+ case "print":
314
+ console.log();
315
+ console.log(_chalk2.default.cyan(`# ${shell} completion script for autohand`));
316
+ console.log(_chalk2.default.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.default.green("Completion script installed to:"));
324
+ console.log(_chalk2.default.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,55 +1,62 @@
1
1
  import {
2
2
  CUSTOM_THEMES_DIR,
3
- getTheme,
4
3
  initTheme,
5
- isThemeInitialized,
6
4
  listAvailableThemes,
7
5
  saveConfig
8
- } from "./chunk-GWIAMKKF.js";
6
+ } from "./chunk-ZBIBLOZL.js";
7
+ import {
8
+ getTheme,
9
+ isThemeInitialized
10
+ } from "./chunk-JS7IPR7P.js";
11
+ import {
12
+ showModal
13
+ } from "./chunk-PNSRJT46.js";
14
+ import {
15
+ t
16
+ } from "./chunk-UET7BDX2.js";
9
17
 
10
18
  // src/commands/theme.ts
11
19
  import chalk from "chalk";
12
- import enquirer from "enquirer";
13
20
  async function theme(ctx) {
14
- const { Select } = enquirer;
15
21
  const themes = listAvailableThemes();
16
22
  const currentTheme = isThemeInitialized() ? getTheme().name : ctx.config.ui?.theme || "dark";
17
- console.log(chalk.cyan("\n\u{1F3A8} Theme Selection\n"));
18
- console.log(chalk.gray(`Current theme: ${chalk.white(currentTheme)}`));
23
+ console.log(chalk.cyan(`
24
+ \u{1F3A8} ${t("commands.theme.title")}
25
+ `));
26
+ console.log(chalk.gray(t("commands.theme.currentTheme", { theme: chalk.white(currentTheme) })));
19
27
  console.log(chalk.gray(`Custom themes location: ${CUSTOM_THEMES_DIR}
20
28
  `));
21
- const choices = themes.map((name) => ({
22
- name,
23
- message: name === currentTheme ? `${name} (current)` : name,
24
- hint: name === "dark" ? "Default dark theme" : name === "light" ? "Light theme" : "Custom theme"
29
+ const options = themes.map((name) => ({
30
+ label: name === currentTheme ? `${name} (current)` : name,
31
+ value: name,
32
+ description: name === "dark" ? "Default dark theme" : name === "light" ? "Light theme" : "Custom theme"
25
33
  }));
26
- try {
27
- const prompt = new Select({
28
- name: "theme",
29
- message: "Select a theme:",
30
- choices,
31
- initial: themes.indexOf(currentTheme)
32
- });
33
- const selected = await prompt.run();
34
- if (selected === currentTheme) {
35
- console.log(chalk.gray("\nNo change made."));
36
- return null;
37
- }
38
- initTheme(selected);
39
- ctx.config.ui = { ...ctx.config.ui, theme: selected };
40
- await saveConfig(ctx.config);
41
- console.log(chalk.green(`
42
- \u2713 Theme changed to '${selected}'`));
43
- const newTheme = getTheme();
44
- console.log("\nTheme preview:");
45
- console.log(` ${newTheme.fg("accent", "\u25CF accent")} ${newTheme.fg("success", "\u25CF success")} ${newTheme.fg("error", "\u25CF error")} ${newTheme.fg("warning", "\u25CF warning")}`);
46
- console.log(` ${newTheme.fg("muted", "\u25CF muted")} ${newTheme.fg("dim", "\u25CF dim")} ${newTheme.fg("text", "\u25CF text")}`);
47
- console.log();
48
- return null;
49
- } catch {
34
+ const result = await showModal({
35
+ title: t("commands.theme.selectPrompt"),
36
+ options,
37
+ initialIndex: themes.indexOf(currentTheme)
38
+ });
39
+ if (!result) {
50
40
  console.log(chalk.gray("\nTheme selection cancelled."));
51
41
  return null;
52
42
  }
43
+ const selected = result.value;
44
+ if (selected === currentTheme) {
45
+ console.log(chalk.gray(`
46
+ ${t("commands.theme.noChange")}`));
47
+ return null;
48
+ }
49
+ initTheme(selected);
50
+ ctx.config.ui = { ...ctx.config.ui, theme: selected };
51
+ await saveConfig(ctx.config);
52
+ console.log(chalk.green(`
53
+ \u2713 ${t("commands.theme.changed", { theme: selected })}`));
54
+ const newTheme = getTheme();
55
+ console.log("\nTheme preview:");
56
+ console.log(` ${newTheme.fg("accent", "\u25CF accent")} ${newTheme.fg("success", "\u25CF success")} ${newTheme.fg("error", "\u25CF error")} ${newTheme.fg("warning", "\u25CF warning")}`);
57
+ console.log(` ${newTheme.fg("muted", "\u25CF muted")} ${newTheme.fg("dim", "\u25CF dim")} ${newTheme.fg("text", "\u25CF text")}`);
58
+ console.log();
59
+ return null;
53
60
  }
54
61
  async function themeInfo() {
55
62
  if (!isThemeInitialized()) {
@@ -77,7 +84,7 @@ async function themeInfo() {
77
84
  }
78
85
  var metadata = {
79
86
  command: "/theme",
80
- description: "change the color theme",
87
+ description: t("commands.theme.description"),
81
88
  implemented: true
82
89
  };
83
90
 
@@ -1,8 +1,12 @@
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/sessions.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
+ var _chunkLOXOD4IScjs = require('./chunk-LOXOD4IS.cjs');
4
+
5
+ // src/commands/sessions.ts
2
6
  var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
3
7
  var metadata = {
4
8
  command: "/sessions",
5
- description: "list all sessions",
9
+ description: _chunkLOXOD4IScjs.t.call(void 0, "commands.sessions.description"),
6
10
  implemented: true
7
11
  };
8
12
  async function sessions(ctx) {
@@ -12,7 +16,7 @@ async function sessions(ctx) {
12
16
  projectFilter ? { project: projectFilter } : void 0
13
17
  );
14
18
  if (allSessions.length === 0) {
15
- console.log(_chalk2.default.gray("No sessions found."));
19
+ console.log(_chalk2.default.gray(_chunkLOXOD4IScjs.t.call(void 0, "commands.sessions.noSessions")));
16
20
  return null;
17
21
  }
18
22
  console.log(_chalk2.default.cyan(`
@@ -1,8 +1,12 @@
1
+ import {
2
+ t
3
+ } from "./chunk-UET7BDX2.js";
4
+
1
5
  // src/commands/automode.ts
2
6
  import chalk from "chalk";
3
7
  var metadata = {
4
8
  command: "/automode",
5
- description: "Start or control autonomous development loops",
9
+ description: t("commands.automode.description"),
6
10
  implemented: true
7
11
  };
8
12
  function parseArgs(args) {
@@ -88,7 +92,7 @@ function handleStatus(manager) {
88
92
  "",
89
93
  ` Session: ${state.sessionId}`,
90
94
  ` Status: ${state.status}`,
91
- ` Iteration: ${state.currentIteration}/${state.maxIterations}`,
95
+ ` ${t("commands.automode.iteration", { current: String(state.currentIteration), max: String(state.maxIterations) })}`,
92
96
  ` Files created: ${state.filesCreated}`,
93
97
  ` Files modified: ${state.filesModified}`
94
98
  ];
@@ -5,6 +5,7 @@ var DEFAULT_MAX_FILE_SIZE = 10 * 1024 * 1024;
5
5
  var DEFAULT_MAX_TOTAL_SIZE = 100 * 1024 * 1024;
6
6
  var DEFAULT_MAX_RETRIES = 3;
7
7
  var DEFAULT_RETRY_DELAY = 1e3;
8
+ var MAX_FILES_PER_REQUEST = 100;
8
9
  var SyncApiClient = class {
9
10
  constructor(config) {
10
11
  this.baseUrl = config?.baseUrl || DEFAULT_BASE_URL;
@@ -89,29 +90,41 @@ var SyncApiClient = class {
89
90
  }
90
91
  /**
91
92
  * Upload sync manifest and request pre-signed URLs for file uploads
93
+ * Batches requests to stay within API limits (max 100 files per request)
92
94
  */
93
95
  async initiateUpload(token, manifest, filePaths) {
94
- const response = await this.fetchWithRetry(
95
- `${this.baseUrl}/v1/sync/upload`,
96
- {
97
- method: "POST",
98
- headers: {
99
- Authorization: `Bearer ${token}`,
100
- "Content-Type": "application/json"
101
- },
102
- body: JSON.stringify({
103
- manifest,
104
- files: filePaths
105
- })
96
+ const batches = [];
97
+ for (let i = 0; i < filePaths.length; i += MAX_FILES_PER_REQUEST) {
98
+ batches.push(filePaths.slice(i, i + MAX_FILES_PER_REQUEST));
99
+ }
100
+ const allUploadUrls = {};
101
+ for (let batchIndex = 0; batchIndex < batches.length; batchIndex++) {
102
+ const batch = batches[batchIndex];
103
+ const response = await this.fetchWithRetry(
104
+ `${this.baseUrl}/v1/sync/upload`,
105
+ {
106
+ method: "POST",
107
+ headers: {
108
+ Authorization: `Bearer ${token}`,
109
+ "Content-Type": "application/json"
110
+ },
111
+ body: JSON.stringify({
112
+ // Only include manifest on first batch
113
+ ...batchIndex === 0 ? { manifest } : {},
114
+ files: batch
115
+ })
116
+ }
117
+ );
118
+ if (!response.ok) {
119
+ const error = await response.text().catch(() => "Unknown error");
120
+ throw new Error(`API error: ${response.status} ${error}`);
106
121
  }
107
- );
108
- if (!response.ok) {
109
- const error = await response.text().catch(() => "Unknown error");
110
- throw new Error(`API error: ${response.status} ${error}`);
122
+ const data = await response.json();
123
+ const batchUrls = data.uploadUrls || {};
124
+ Object.assign(allUploadUrls, batchUrls);
111
125
  }
112
- const data = await response.json();
113
126
  return {
114
- uploadUrls: data.uploadUrls || {}
127
+ uploadUrls: allUploadUrls
115
128
  };
116
129
  }
117
130
  /**
@@ -180,26 +193,36 @@ var SyncApiClient = class {
180
193
  }
181
194
  /**
182
195
  * Request pre-signed URLs for file downloads
196
+ * Batches requests to stay within API limits (max 100 files per request)
183
197
  */
184
198
  async initiateDownload(token, filePaths) {
185
- const response = await this.fetchWithRetry(
186
- `${this.baseUrl}/v1/sync/download`,
187
- {
188
- method: "POST",
189
- headers: {
190
- Authorization: `Bearer ${token}`,
191
- "Content-Type": "application/json"
192
- },
193
- body: JSON.stringify({ files: filePaths })
199
+ const batches = [];
200
+ for (let i = 0; i < filePaths.length; i += MAX_FILES_PER_REQUEST) {
201
+ batches.push(filePaths.slice(i, i + MAX_FILES_PER_REQUEST));
202
+ }
203
+ const allDownloadUrls = {};
204
+ for (const batch of batches) {
205
+ const response = await this.fetchWithRetry(
206
+ `${this.baseUrl}/v1/sync/download`,
207
+ {
208
+ method: "POST",
209
+ headers: {
210
+ Authorization: `Bearer ${token}`,
211
+ "Content-Type": "application/json"
212
+ },
213
+ body: JSON.stringify({ files: batch })
214
+ }
215
+ );
216
+ if (!response.ok) {
217
+ const error = await response.text().catch(() => "Unknown error");
218
+ throw new Error(`API error: ${response.status} ${error}`);
194
219
  }
195
- );
196
- if (!response.ok) {
197
- const error = await response.text().catch(() => "Unknown error");
198
- throw new Error(`API error: ${response.status} ${error}`);
220
+ const data = await response.json();
221
+ const batchUrls = data.downloadUrls || {};
222
+ Object.assign(allDownloadUrls, batchUrls);
199
223
  }
200
- const data = await response.json();
201
224
  return {
202
- downloadUrls: data.downloadUrls || {}
225
+ downloadUrls: allDownloadUrls
203
226
  };
204
227
  }
205
228
  /**