autohand-cli 0.8.3 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. package/README.md +191 -74
  2. package/dist/{AgentRegistry-ODDXPAFR.js → AgentRegistry-GOV7FN2O.js} +2 -2
  3. package/dist/AgentRegistry-J2C6JBZ3.cjs +10 -0
  4. package/dist/{AutomodeManager-EOVHGRPP.js → AutomodeManager-APLLPEYJ.js} +31 -17
  5. package/dist/{AutomodeManager-6ATBE7Q5.cjs → AutomodeManager-MPSXT2RH.cjs} +38 -24
  6. package/dist/CommunitySkillsCache-22BB3J6H.cjs +8 -0
  7. package/dist/{CommunitySkillsCache-QLE57BN5.js → CommunitySkillsCache-ZACDPD4J.js} +2 -2
  8. package/dist/GitHubRegistryFetcher-CYJLF2XL.cjs +7 -0
  9. package/dist/{GitHubRegistryFetcher-NT5GFZXS.js → GitHubRegistryFetcher-J2BWPXJF.js} +1 -1
  10. package/dist/{HookManager-B2F35M27.js → HookManager-2S6AHOC3.js} +1 -1
  11. package/dist/{HookManager-PFAFE3FK.cjs → HookManager-TVEQI5ZU.cjs} +2 -2
  12. package/dist/{ImportWizard-OHRKBANZ.js → ImportWizard-AEBMAKXE.js} +33 -9
  13. package/dist/{ImportWizard-CJRZPPHL.cjs → ImportWizard-AF2XL6DS.cjs} +37 -13
  14. package/dist/LearnAdvisor-KKEQ5QCV.js +9 -0
  15. package/dist/LearnAdvisor-Q7RAYLPF.cjs +9 -0
  16. package/dist/{McpClientManager-NQ3EW2IF.cjs → McpClientManager-BNSKLHIN.cjs} +2 -2
  17. package/dist/{McpClientManager-VBIMGKXU.js → McpClientManager-SL35BR24.js} +1 -1
  18. package/dist/MemoryManager-PMNAEZMB.cjs +8 -0
  19. package/dist/{MemoryManager-2LAT7IHS.js → MemoryManager-QZRLTUB5.js} +2 -2
  20. package/dist/NVIDIAProvider-C3FWQOBZ.cjs +14 -0
  21. package/dist/NVIDIAProvider-SJPY3ONR.js +14 -0
  22. package/dist/{PermissionManager-7NQHRCHY.js → PermissionManager-MT7KBNNR.js} +3 -3
  23. package/dist/PermissionManager-URCNP5EC.cjs +11 -0
  24. package/dist/{ProjectProfiler-UG42W6WD.cjs → ProjectProfiler-CDAE7ECW.cjs} +1 -0
  25. package/dist/{ProjectProfiler-P4QJQWWA.js → ProjectProfiler-NZTJDRHD.js} +1 -0
  26. package/dist/ProviderFactory-56N3ECE4.cjs +12 -0
  27. package/dist/{ProviderFactory-2IYJ5OPW.js → ProviderFactory-RB4RVAF6.js} +4 -1
  28. package/dist/SessionManager-2IZGWASQ.cjs +10 -0
  29. package/dist/{SessionManager-4U4JFQ3C.js → SessionManager-554PHVPC.js} +2 -2
  30. package/dist/SkillsRegistry-GMRVONOQ.cjs +9 -0
  31. package/dist/{SkillsRegistry-RFEINXRT.js → SkillsRegistry-NHHMIUYJ.js} +2 -2
  32. package/dist/SubAgent-4GOR2FIJ.js +13 -0
  33. package/dist/SubAgent-ZJMDH4FI.cjs +13 -0
  34. package/dist/{SyncApiClient-B5RT2ECG.js → SyncApiClient-G3FM65IV.js} +1 -1
  35. package/dist/SyncApiClient-ODBDECOG.cjs +11 -0
  36. package/dist/about-3USFSGOH.js +15 -0
  37. package/dist/about-QR52U5DD.cjs +15 -0
  38. package/dist/acp-5Y2W6OZP.js +1556 -0
  39. package/dist/acp-GSYE75OB.cjs +1556 -0
  40. package/dist/actionExecutor-KHUU3Z3Q.cjs +28 -0
  41. package/dist/actionExecutor-PLQJZLZV.js +28 -0
  42. package/dist/add-dir-BTAD5OZS.cjs +11 -0
  43. package/dist/{add-dir-TUJM3PG5.js → add-dir-HCERJDBR.js} +3 -2
  44. package/dist/agent-B3EVT7NN.cjs +126 -0
  45. package/dist/agent-SATQ3WZ3.js +126 -0
  46. package/dist/agents/builtin/code-cleaner.md +1 -1
  47. package/dist/agents/builtin/docs-writer.md +1 -1
  48. package/dist/agents/builtin/researcher.md +2 -2
  49. package/dist/agents/builtin/reviewer.md +1 -1
  50. package/dist/agents/builtin/tester.md +1 -1
  51. package/dist/agents/builtin/todo-resolver.md +1 -1
  52. package/dist/agents-44CRJGM7.cjs +18 -0
  53. package/dist/agents-NN4ZAJ7R.js +18 -0
  54. package/dist/agents-new-6D6G4QS6.cjs +17 -0
  55. package/dist/agents-new-7GAQ25EK.js +17 -0
  56. package/dist/{autoSkill-LQEVQFIH.js → autoSkill-66PKCYTW.js} +2 -2
  57. package/dist/autoSkill-VQLGBELN.cjs +20 -0
  58. package/dist/automode-45DWV4TN.cjs +10 -0
  59. package/dist/{automode-R6P3VHLS.js → automode-BUF3VGXU.js} +2 -2
  60. package/dist/browserToolBridge-BXRQB4B4.cjs +58 -0
  61. package/dist/browserToolBridge-F5N66PE7.js +58 -0
  62. package/dist/chrome-Q2U73HZB.cjs +50 -0
  63. package/dist/chrome-Q54OALOK.cjs +21 -0
  64. package/dist/chrome-Y3T7EIHG.js +50 -0
  65. package/dist/chrome-ZNJ46OYW.js +21 -0
  66. package/dist/chromeSkill-53TH55PM.js +105 -0
  67. package/dist/chromeSkill-THW7N4IY.cjs +105 -0
  68. package/dist/{chunk-HXGBSJL5.cjs → chunk-22SCR3EV.cjs} +2 -2
  69. package/dist/chunk-26G7YGOW.js +367 -0
  70. package/dist/{chunk-3L53OA4E.cjs → chunk-2ESQR35E.cjs} +10 -10
  71. package/dist/chunk-2H5O745H.js +63 -0
  72. package/dist/{chunk-ULDM2SNB.js → chunk-2IW5YFJ4.js} +48 -47
  73. package/dist/{chunk-U55TWFJI.cjs → chunk-2VHB43IX.cjs} +24 -6
  74. package/dist/chunk-3EDDDZS2.cjs +5 -0
  75. package/dist/{chunk-X5VSP65C.cjs → chunk-3ICORF7M.cjs} +4 -4
  76. package/dist/chunk-3OF56EMA.cjs +197 -0
  77. package/dist/chunk-3UC6DMFI.cjs +93 -0
  78. package/dist/{chunk-64H4FRM3.cjs → chunk-3UHRCHKB.cjs} +32 -34
  79. package/dist/{chunk-JCLYQ2JC.js → chunk-3ZOOH44N.js} +12 -6
  80. package/dist/{chunk-TUD3Z3BD.js → chunk-44ZWOBTI.js} +136 -55
  81. package/dist/chunk-4567QNRB.js +444 -0
  82. package/dist/chunk-45CHNQM6.cjs +517 -0
  83. package/dist/chunk-46MTALKD.js +44 -0
  84. package/dist/{chunk-WHE2SWHU.js → chunk-4E7SHPNQ.js} +2 -2
  85. package/dist/chunk-4LMUDS2K.js +124 -0
  86. package/dist/{chunk-W7RYQJLO.cjs → chunk-4XFHP2SN.cjs} +46 -15
  87. package/dist/chunk-4XVLNOFA.js +360 -0
  88. package/dist/{chunk-GBHDROGL.js → chunk-575PXZX7.js} +16 -4
  89. package/dist/chunk-5A7ZL64N.js +139 -0
  90. package/dist/chunk-5GCQ5UMV.cjs +85 -0
  91. package/dist/chunk-5JTTM5SC.js +59 -0
  92. package/dist/{chunk-IETRBBMP.cjs → chunk-5K3CDSWZ.cjs} +108 -31
  93. package/dist/{chunk-KLWJIPU2.cjs → chunk-5SFV2NCY.cjs} +20 -16
  94. package/dist/chunk-5ZNYX4VH.cjs +71 -0
  95. package/dist/{chunk-A4IJHHV7.cjs → chunk-63ANVAOJ.cjs} +52 -11
  96. package/dist/{chunk-MYISNQH4.js → chunk-65LRPW5W.js} +1 -1
  97. package/dist/chunk-6AYJCDTA.js +360 -0
  98. package/dist/{chunk-X2MSVKDV.js → chunk-6HF6XSCC.js} +2 -2
  99. package/dist/{chunk-AEJH23FO.cjs → chunk-6JWCGQJU.cjs} +6 -6
  100. package/dist/chunk-6OECOAK5.cjs +360 -0
  101. package/dist/chunk-6R25D2H5.js +121 -0
  102. package/dist/chunk-7DJJGKM6.js +77 -0
  103. package/dist/{chunk-VG34MG2U.js → chunk-7IRQ7JEH.js} +9 -6
  104. package/dist/chunk-7MY4JHER.js +27 -0
  105. package/dist/chunk-7PJKTSRN.js +152 -0
  106. package/dist/{chunk-SKYG33B2.cjs → chunk-7PT646AL.cjs} +3 -3
  107. package/dist/chunk-7WAUCLLQ.js +229 -0
  108. package/dist/{chunk-U46VYPLR.cjs → chunk-7XTUL7ZD.cjs} +9 -9
  109. package/dist/chunk-AE2ILW25.cjs +152 -0
  110. package/dist/{chunk-T2M64VHA.cjs → chunk-AOKXYGBQ.cjs} +61 -41
  111. package/dist/chunk-AQ5PVHOC.cjs +113 -0
  112. package/dist/{chunk-N2BLVUPM.cjs → chunk-AZ47LKD5.cjs} +3 -3
  113. package/dist/chunk-B4HSNOIH.cjs +354 -0
  114. package/dist/chunk-B76FJKEJ.cjs +184 -0
  115. package/dist/chunk-BP37FVBM.js +85 -0
  116. package/dist/chunk-BQU3HAE7.js +21 -0
  117. package/dist/chunk-BYE7RQFZ.cjs +121 -0
  118. package/dist/chunk-C46B72VK.js +1034 -0
  119. package/dist/{chunk-HIVRCQS2.js → chunk-C5QIQQ37.js} +56 -25
  120. package/dist/chunk-CCIDL4SA.js +19931 -0
  121. package/dist/{chunk-XVUHNWMX.js → chunk-CECH6QQP.js} +17 -19
  122. package/dist/chunk-CFAWTLSC.js +13 -0
  123. package/dist/{chunk-ZYQMLKOK.cjs → chunk-CK4HAHVY.cjs} +212 -70
  124. package/dist/chunk-CO2AADYU.cjs +360 -0
  125. package/dist/chunk-CRTCZ4WL.cjs +19931 -0
  126. package/dist/chunk-CSTUTDTH.js +75 -0
  127. package/dist/{chunk-K2C56QGS.cjs → chunk-D546G7DA.cjs} +1650 -479
  128. package/dist/{chunk-CNBKZEX5.cjs → chunk-DA7NBAJK.cjs} +49 -17
  129. package/dist/{chunk-G4CAKI3V.js → chunk-DGBPWODD.js} +7 -2
  130. package/dist/chunk-DHUQZ53B.cjs +29 -0
  131. package/dist/{chunk-RGR6ME5J.cjs → chunk-DI57A4BX.cjs} +25 -28
  132. package/dist/{chunk-5K6NGAVM.js → chunk-DNSD7DVJ.js} +67 -52
  133. package/dist/{chunk-RDF37HKB.cjs → chunk-DSSCERHI.cjs} +3 -2
  134. package/dist/{chunk-NAJ4IZKD.cjs → chunk-EA2MS25U.cjs} +8 -6
  135. package/dist/{chunk-SJAVBCOA.js → chunk-EEHWALXA.js} +94 -3
  136. package/dist/chunk-ES2HJQ4N.js +37 -0
  137. package/dist/{chunk-G27PQQFD.js → chunk-EYHKL4QC.js} +1 -1
  138. package/dist/{chunk-SV2WA57F.js → chunk-FBQJZKFX.js} +38 -15
  139. package/dist/chunk-FFBDRUO5.cjs +59 -0
  140. package/dist/{chunk-N7LI55V4.js → chunk-FFHSCM5M.js} +15 -8
  141. package/dist/{chunk-SAHBLB3E.js → chunk-FP46B4X3.js} +208 -3
  142. package/dist/chunk-FQVG6ZHF.js +197 -0
  143. package/dist/{chunk-J2GSFVUV.cjs → chunk-GAOPJ5S3.cjs} +74 -59
  144. package/dist/{chunk-S52YW5ZQ.js → chunk-GNBBIAMD.js} +16 -19
  145. package/dist/chunk-GSDV75A5.js +715 -0
  146. package/dist/chunk-GWY26SUD.cjs +63 -0
  147. package/dist/{chunk-TUAITHWL.js → chunk-H426KOGY.js} +2 -1
  148. package/dist/{chunk-EZMINVLU.js → chunk-H4D2Q2AL.js} +5 -2
  149. package/dist/chunk-HC2Q6A3E.cjs +4967 -0
  150. package/dist/{chunk-3WVJEL7K.cjs → chunk-HDK2EHVH.cjs} +3 -1
  151. package/dist/{chunk-5IXII4HX.cjs → chunk-HG3ZASBH.cjs} +23 -16
  152. package/dist/chunk-HK5A54AV.cjs +280 -0
  153. package/dist/{chunk-LQGVEP3E.js → chunk-HQUSEWT4.js} +45 -13
  154. package/dist/chunk-HSWWM6AM.js +2340 -0
  155. package/dist/chunk-HTU4W3GB.js +183 -0
  156. package/dist/{chunk-HLHTG5ZU.cjs → chunk-HVCIB4SW.cjs} +14 -12
  157. package/dist/chunk-HXHE2KAO.js +385 -0
  158. package/dist/{chunk-LJFUXC56.cjs → chunk-HXQREVTA.cjs} +9 -6
  159. package/dist/{chunk-SLQAYV3W.js → chunk-HZWU6IO3.js} +11 -2
  160. package/dist/chunk-I2ZK3AOD.js +866 -0
  161. package/dist/chunk-IEPLQ47J.js +719 -0
  162. package/dist/chunk-J5HE6CUM.cjs +124 -0
  163. package/dist/{chunk-LIEXWM2M.js → chunk-JAQO6XDB.js} +19 -1
  164. package/dist/chunk-JB3JCYBJ.js +113 -0
  165. package/dist/chunk-JCUHCH37.cjs +247 -0
  166. package/dist/{chunk-FPHU2ES6.cjs → chunk-JM3ZTQUK.cjs} +19 -9
  167. package/dist/{chunk-NDMIPTV4.js → chunk-JMJRFSNJ.js} +8 -3
  168. package/dist/{chunk-ZLSGXMGQ.js → chunk-JMN3GZU6.js} +2 -0
  169. package/dist/chunk-JPFRI4L4.js +4967 -0
  170. package/dist/{chunk-BVKXEQVG.cjs → chunk-JV5HVCHU.cjs} +22 -10
  171. package/dist/chunk-KA2U6MY2.js +388 -0
  172. package/dist/{chunk-SEKD5FH3.cjs → chunk-KASXKDF2.cjs} +8 -3
  173. package/dist/chunk-KJ26T7GM.cjs +367 -0
  174. package/dist/chunk-KM7R5YPS.cjs +385 -0
  175. package/dist/{chunk-MBBY4ZIK.js → chunk-KMP6Y3LJ.js} +4 -1
  176. package/dist/chunk-KWXGDSYT.js +184 -0
  177. package/dist/{chunk-C5IJIM2V.cjs → chunk-L46OUKW5.cjs} +68 -37
  178. package/dist/{chunk-6UJMCWRY.js → chunk-L6OH44HL.js} +19 -9
  179. package/dist/chunk-LANGD5CO.js +280 -0
  180. package/dist/{chunk-APIXPPMT.js → chunk-LEZEWKPA.js} +1004 -39
  181. package/dist/{chunk-ULQ6MDSJ.cjs → chunk-LFDPTJYF.cjs} +43 -35
  182. package/dist/chunk-LJD7KR3L.cjs +44 -0
  183. package/dist/{chunk-NCC6ETZS.js → chunk-LUMV3DB2.js} +41 -33
  184. package/dist/{chunk-QXH5RCFI.js → chunk-M5DK524Z.js} +2 -2
  185. package/dist/chunk-M7B7RRBK.cjs +1034 -0
  186. package/dist/chunk-MANJ67D3.js +3897 -0
  187. package/dist/{chunk-HPHJ73GU.cjs → chunk-MGNXABSU.cjs} +9 -9
  188. package/dist/{chunk-6ZCULLCA.js → chunk-MMKZSJUN.js} +1 -1
  189. package/dist/{chunk-DVUHHH3B.cjs → chunk-MQQH4XQH.cjs} +4 -4
  190. package/dist/chunk-MUNUUFU7.cjs +21 -0
  191. package/dist/{chunk-DVZOENQ7.cjs → chunk-MZN6JBRZ.cjs} +9 -4
  192. package/dist/{chunk-OOKY3HPZ.js → chunk-NB6M6ESM.js} +50 -9
  193. package/dist/{chunk-BYONM7UM.js → chunk-NBGOIFKP.js} +265 -18
  194. package/dist/chunk-NHWHEW7M.cjs +75 -0
  195. package/dist/chunk-NQZH5CR2.cjs +468 -0
  196. package/dist/{chunk-EGPXJERY.cjs → chunk-NV6LCD2I.cjs} +119 -28
  197. package/dist/chunk-NVATU4V6.cjs +44 -0
  198. package/dist/{chunk-YZXUDM5X.js → chunk-NZ3ZWLUW.js} +204 -62
  199. package/dist/chunk-NZ7GCK7Y.cjs +92 -0
  200. package/dist/{chunk-VEKDGU2Q.cjs → chunk-NZQFKXM3.cjs} +49 -25
  201. package/dist/chunk-O5GI6SR3.js +59 -0
  202. package/dist/{chunk-56SWIDEL.cjs → chunk-OCATAKXV.cjs} +57 -56
  203. package/dist/{chunk-SKV2F3NM.js → chunk-OIGYWOL6.js} +1 -1
  204. package/dist/{chunk-IFFXSTOM.cjs → chunk-ONVYXTUT.cjs} +3 -3
  205. package/dist/chunk-OR67YXQK.cjs +13 -0
  206. package/dist/chunk-OV3T5MUH.cjs +715 -0
  207. package/dist/{chunk-OHUZKDGX.js → chunk-P4FUTSVK.js} +3 -3
  208. package/dist/chunk-P6SLT2F4.cjs +139 -0
  209. package/dist/{chunk-TNZRZQ7Q.js → chunk-PB7W7R72.js} +3 -78
  210. package/dist/chunk-PCM3N3CL.cjs +37 -0
  211. package/dist/{chunk-2AA5MFES.js → chunk-PGFLPURU.js} +8 -5
  212. package/dist/{chunk-DJDE4DTT.cjs → chunk-PIXQ2AVM.cjs} +25 -19
  213. package/dist/chunk-PNIAIOMZ.cjs +229 -0
  214. package/dist/{chunk-HTLINWX6.cjs → chunk-PQBYFEBL.cjs} +16 -13
  215. package/dist/{chunk-22D2CNTP.cjs → chunk-PSAH4ZQB.cjs} +5 -2
  216. package/dist/{chunk-3VTAFAL2.js → chunk-PTTZI4QZ.js} +16 -12
  217. package/dist/{chunk-WPVWQSL7.cjs → chunk-PY73W5MQ.cjs} +16 -13
  218. package/dist/{chunk-EGMZDTSL.js → chunk-PZZMIYII.js} +10 -2
  219. package/dist/{chunk-HBZU3RBZ.js → chunk-Q3BS6FPM.js} +34 -10
  220. package/dist/chunk-QBYGMMDD.js +517 -0
  221. package/dist/chunk-QLZOMZO5.cjs +388 -0
  222. package/dist/{chunk-ADUFCS4Q.cjs → chunk-QQ64HEHP.cjs} +160 -79
  223. package/dist/{chunk-L3TWPROA.js → chunk-QRQF3556.js} +44 -24
  224. package/dist/{chunk-YHD6TUIR.cjs → chunk-QW2RW2GY.cjs} +2 -0
  225. package/dist/chunk-RAKO7UN7.js +114 -0
  226. package/dist/{chunk-7TQH3CL4.cjs → chunk-RBXBH6EB.cjs} +78 -35
  227. package/dist/chunk-RFUKZIJF.cjs +78 -0
  228. package/dist/chunk-RS2E32YB.js +71 -0
  229. package/dist/{chunk-OLSBBZW6.cjs → chunk-S5JNQIGL.cjs} +5 -5
  230. package/dist/{chunk-FTYY5JJD.js → chunk-S5QKRA2V.js} +2 -2
  231. package/dist/chunk-SD3NTC7D.cjs +77 -0
  232. package/dist/{chunk-KPELYZ6L.js → chunk-SDLY4X3G.js} +2 -2
  233. package/dist/{chunk-IDFF5J2E.js → chunk-SFFEKZGC.js} +38 -7
  234. package/dist/{chunk-EGFT4PGW.js → chunk-SHRLFX6F.js} +8 -3
  235. package/dist/{chunk-3WICOC33.js → chunk-SNDDZG5H.js} +124 -84
  236. package/dist/{chunk-CZXGCVTR.cjs → chunk-SOVR7S3T.cjs} +2 -2
  237. package/dist/chunk-SPQ7QIQ6.js +78 -0
  238. package/dist/{chunk-XRZEUWKF.js → chunk-SRMGWMQO.js} +1 -1
  239. package/dist/{chunk-R33VKSH5.cjs → chunk-SVVP4UUZ.cjs} +11 -11
  240. package/dist/{chunk-7BTSG4ME.cjs → chunk-SY2P3Z5W.cjs} +1004 -39
  241. package/dist/chunk-SZD45IDG.js +468 -0
  242. package/dist/{chunk-3O3MOK5C.cjs → chunk-TE4SYTWR.cjs} +1114 -142
  243. package/dist/chunk-TH26BQJG.js +101 -0
  244. package/dist/{chunk-QNGEW5TC.js → chunk-TR6NECEZ.js} +1 -1
  245. package/dist/{chunk-YGN4CQIP.js → chunk-TYBPTKFT.js} +1 -1
  246. package/dist/{chunk-GJH7XMSK.js → chunk-U2QUMKCB.js} +8 -6
  247. package/dist/{chunk-47CKWKEX.cjs → chunk-U6PLSPMD.cjs} +9 -4
  248. package/dist/chunk-UOQECODR.js +34 -0
  249. package/dist/chunk-UR27UDTB.js +354 -0
  250. package/dist/chunk-UWZ4G3SQ.js +93 -0
  251. package/dist/{chunk-Y72HH2TF.cjs → chunk-V3SZLWEQ.cjs} +33 -24
  252. package/dist/chunk-V4HGZSKQ.cjs +183 -0
  253. package/dist/{chunk-3PDTTAKJ.js → chunk-V5ELP2XE.js} +19 -12
  254. package/dist/{chunk-3K2ESU53.cjs → chunk-VKOXFT4L.cjs} +2 -2
  255. package/dist/{chunk-XTB6VJVQ.cjs → chunk-VLGGMQUN.cjs} +6 -6
  256. package/dist/chunk-VQHSYAPZ.cjs +3897 -0
  257. package/dist/chunk-VUGOOGHB.js +400 -0
  258. package/dist/chunk-W5QLA6WP.cjs +866 -0
  259. package/dist/chunk-WBU4Q4GS.cjs +400 -0
  260. package/dist/{chunk-KWXVKLQ5.cjs → chunk-WGNMOVMT.cjs} +7 -82
  261. package/dist/chunk-WJYFLQ7G.cjs +27 -0
  262. package/dist/{chunk-RKJTGGMU.cjs → chunk-WKRDBCP2.cjs} +221 -16
  263. package/dist/{chunk-ZSPXQYG2.js → chunk-WNJXIACY.js} +7 -5
  264. package/dist/{chunk-AYS2ASM7.js → chunk-WPE2XHVX.js} +1 -1
  265. package/dist/chunk-WTB7AFL6.cjs +101 -0
  266. package/dist/{chunk-JYTDYJVW.js → chunk-X3TI5TJJ.js} +1 -1
  267. package/dist/chunk-X5P6QQOB.cjs +719 -0
  268. package/dist/{chunk-245KJE5Y.cjs → chunk-X7XMITIL.cjs} +14 -6
  269. package/dist/chunk-XF2WIKHR.cjs +34 -0
  270. package/dist/{chunk-DV2ZHK7B.cjs → chunk-XNIMSVS6.cjs} +49 -26
  271. package/dist/chunk-XW3XCK4E.cjs +59 -0
  272. package/dist/{chunk-N23UAW4I.js → chunk-XZVDYC5U.js} +7 -2
  273. package/dist/chunk-Y5BDE24P.cjs +444 -0
  274. package/dist/{chunk-NAGQ2PDC.js → chunk-YC5OBZQU.js} +1604 -433
  275. package/dist/chunk-YISPVAXO.cjs +2340 -0
  276. package/dist/{chunk-KQGPTCQJ.js → chunk-YQDI753V.js} +68 -25
  277. package/dist/{chunk-UJ2JSM6H.js → chunk-YVQI26H4.js} +2 -0
  278. package/dist/{chunk-NNPAM4HC.cjs → chunk-YWH55BWK.cjs} +15 -6
  279. package/dist/{chunk-X2YOZQIP.cjs → chunk-YWTIXHU6.cjs} +266 -19
  280. package/dist/{chunk-XX2ZO7DS.js → chunk-YXM6SA7P.js} +25 -16
  281. package/dist/chunk-YZWE7XSM.js +5 -0
  282. package/dist/chunk-ZASDSY7P.cjs +114 -0
  283. package/dist/{chunk-2UC22DJU.js → chunk-ZNGRLCFQ.js} +30 -4
  284. package/dist/{chunk-KANW6OYC.cjs → chunk-ZNYZB7XY.cjs} +34 -8
  285. package/dist/{chunk-NA6WQDYW.js → chunk-ZPLCAXJW.js} +1088 -116
  286. package/dist/{chunk-7UOUW76C.js → chunk-ZQAT5VT5.js} +101 -24
  287. package/dist/chunk-ZUYYHKQA.js +44 -0
  288. package/dist/clear-QJXU25IF.cjs +12 -0
  289. package/dist/{clear-A3N4GK2S.js → clear-Y5TO3RZA.js} +3 -3
  290. package/dist/communityInstaller-LXMVKVAV.cjs +22 -0
  291. package/dist/{communityInstaller-LOP2EDH5.js → communityInstaller-RVL4STPS.js} +8 -5
  292. package/dist/completion-JX4T2ONW.cjs +17 -0
  293. package/dist/completion-SE3XYG74.js +17 -0
  294. package/dist/config-3224PRW4.cjs +21 -0
  295. package/dist/{config-HPJPKTO6.js → config-7KPHKFTP.js} +7 -4
  296. package/dist/{constants-LISJW3DD.js → constants-EJFAWJQI.js} +1 -1
  297. package/dist/constants-MCCGUU5F.cjs +21 -0
  298. package/dist/{defaultHooks-IHSJR2AX.cjs → defaultHooks-2V2CQL63.cjs} +25 -10
  299. package/dist/{defaultHooks-KUKHK3AG.js → defaultHooks-TMHDU3FS.js} +25 -10
  300. package/dist/export-BJVIDZC4.js +15 -0
  301. package/dist/export-KU4557HK.cjs +15 -0
  302. package/dist/feature-K3LG5IJP.cjs +14 -0
  303. package/dist/feature-V4JF5TNJ.js +14 -0
  304. package/dist/features-5OJTLKS7.js +23 -0
  305. package/dist/features-VCBJQXCX.cjs +23 -0
  306. package/dist/feedback-D4437VE4.js +18 -0
  307. package/dist/feedback-VZPEHGFY.cjs +18 -0
  308. package/dist/fffSearchProvider-2YCNKOYD.js +412 -0
  309. package/dist/fffSearchProvider-W6627E2V.cjs +412 -0
  310. package/dist/{filesystem-Z7BWAWMZ.js → filesystem-L6DQKGWK.js} +3 -2
  311. package/dist/filesystem-PGUPCMVK.cjs +11 -0
  312. package/dist/go-X4E6BCD6.js +12 -0
  313. package/dist/go-XREVFS5I.cjs +12 -0
  314. package/dist/goal-4M3J6JS2.cjs +16 -0
  315. package/dist/goal-EI66BV7W.js +16 -0
  316. package/dist/help-GGFS7WHY.cjs +12 -0
  317. package/dist/{help-GFQXNZOK.js → help-MLIROWKM.js} +2 -2
  318. package/dist/{history-E3N6BJP7.js → history-GQJ6RZD6.js} +2 -2
  319. package/dist/history-J4LUIOSI.cjs +14 -0
  320. package/dist/hooks-FSRIUS6A.cjs +18 -0
  321. package/dist/hooks-PPFHCF7T.js +18 -0
  322. package/dist/i18n-CI6VFXL5.cjs +33 -0
  323. package/dist/{i18n-SY7QRM22.js → i18n-Q7UZJRPL.js} +1 -1
  324. package/dist/ide-BUSVE54P.js +15 -0
  325. package/dist/ide-YR27BPGM.cjs +15 -0
  326. package/dist/immediateCommandRouter-MTEHZXQX.js +15 -0
  327. package/dist/immediateCommandRouter-ROXU3MWT.cjs +15 -0
  328. package/dist/{import-W7SVLSTC.js → import-3VBKI6BN.js} +3 -3
  329. package/dist/{import-ADI37ZUR.cjs → import-C7S6UJMW.cjs} +3 -3
  330. package/dist/import-DBK4OCDF.cjs +10 -0
  331. package/dist/{import-KGKKZ3B7.js → import-U47DXCA7.js} +2 -2
  332. package/dist/index.cjs +837 -23011
  333. package/dist/index.d.cts +95 -0
  334. package/dist/index.d.ts +95 -0
  335. package/dist/index.js +864 -23038
  336. package/dist/init-OXTYS72D.cjs +10 -0
  337. package/dist/{init-7MFK626E.js → init-Q2O4R42R.js} +2 -2
  338. package/dist/inkMode-VUE6ZDLD.cjs +7 -0
  339. package/dist/inkMode-WBNFOSAT.js +7 -0
  340. package/dist/inputPrompt-3CFZDUBH.js +90 -0
  341. package/dist/inputPrompt-JMACL4EB.cjs +90 -0
  342. package/dist/language-EK3M6UBV.cjs +22 -0
  343. package/dist/language-Q3RUGGOW.js +22 -0
  344. package/dist/learn-3DSX7DYG.cjs +23 -0
  345. package/dist/learn-OPOH5L43.js +23 -0
  346. package/dist/login-GST7MWXJ.cjs +27 -0
  347. package/dist/login-Q7DZKAX4.js +27 -0
  348. package/dist/logout-2G7OUK7I.cjs +24 -0
  349. package/dist/logout-FNBBL2UI.js +24 -0
  350. package/dist/mcp-AH3MMUBU.js +21 -0
  351. package/dist/mcp-DW7R63IB.cjs +21 -0
  352. package/dist/{mcp-install-2FEROZTL.js → mcp-install-222PCKSW.js} +18 -10
  353. package/dist/{mcp-install-WM6BQRI5.cjs → mcp-install-IA4ZS2SV.cjs} +22 -14
  354. package/dist/memory-6NX3DAIY.cjs +10 -0
  355. package/dist/{memory-J73WZH2I.js → memory-VB46T5H3.js} +2 -2
  356. package/dist/model-64NAELFS.cjs +10 -0
  357. package/dist/{model-AES267IN.js → model-SJJG64AM.js} +2 -2
  358. package/dist/new-DU5SOOOY.cjs +12 -0
  359. package/dist/{new-5CLF3MKH.js → new-ERZ5C6CN.js} +3 -3
  360. package/dist/onboarding-2U2BV2KE.cjs +36 -0
  361. package/dist/onboarding-ZQXMPSMJ.js +36 -0
  362. package/dist/permissions-7ACNFK7A.js +10 -0
  363. package/dist/permissions-GSNNV7RJ.cjs +10 -0
  364. package/dist/plan-XEJMOT55.cjs +13 -0
  365. package/dist/{plan-65HMS5HQ.js → plan-YYUAXPTL.js} +3 -1
  366. package/dist/pr-review-CW6J7P62.cjs +9 -0
  367. package/dist/pr-review-YZSBQVT2.js +9 -0
  368. package/dist/{quit-XDZYRSPU.js → quit-WY6T267G.js} +2 -2
  369. package/dist/quit-XIRE2KRE.cjs +10 -0
  370. package/dist/rawMode-6W5AXAKI.cjs +7 -0
  371. package/dist/rawMode-GFNLXQPU.js +7 -0
  372. package/dist/{registry-PTHWERKC.js → registry-4DXUDKJN.js} +29 -44
  373. package/dist/{registry-IVT4G2RT.cjs → registry-UEO3ETZ7.cjs} +65 -80
  374. package/dist/repeat-P4FAPE3Y.cjs +17 -0
  375. package/dist/{repeat-EVCWUL6Z.js → repeat-RALE6AUO.js} +7 -3
  376. package/dist/resume-RQZ3WXBP.cjs +17 -0
  377. package/dist/resume-XSXZMDMD.js +17 -0
  378. package/dist/review-QHP2KP4Q.js +9 -0
  379. package/dist/review-UWHWQHCB.cjs +9 -0
  380. package/dist/ripgrep-67SCU2BA.cjs +9 -0
  381. package/dist/ripgrep-VHJQQ55W.js +9 -0
  382. package/dist/rpc-XH7QLN4H.js +3874 -0
  383. package/dist/rpc-YF54T7JU.cjs +3874 -0
  384. package/dist/search-VXXFGZWU.cjs +21 -0
  385. package/dist/search-YAWGX7P7.js +21 -0
  386. package/dist/{sessions-6GWEBMKS.js → sessions-NJYHJOEL.js} +2 -2
  387. package/dist/sessions-OSG3UJEZ.cjs +10 -0
  388. package/dist/settings-SO2UIGWV.cjs +42 -0
  389. package/dist/settings-ZXUQH3DO.js +42 -0
  390. package/dist/setup-KG7EGKF5.js +30 -0
  391. package/dist/setup-RSOPCQ57.cjs +30 -0
  392. package/dist/share-WFAGZ5PY.js +17 -0
  393. package/dist/share-ZU3SGACF.cjs +17 -0
  394. package/dist/skills-KBVAQAD2.cjs +29 -0
  395. package/dist/skills-NBTNDVAY.js +29 -0
  396. package/dist/{skills-ZZCIAS7C.js → skills-OB6RDW7D.js} +10 -7
  397. package/dist/{skills-PG542VEB.cjs → skills-ZROBG3RZ.cjs} +13 -10
  398. package/dist/{skills-install-SRC3Z2MS.js → skills-install-BHTIEMKH.js} +21 -70
  399. package/dist/{skills-install-67DOBPJC.cjs → skills-install-ILX6QVEF.cjs} +34 -83
  400. package/dist/skills-new-B45VQ2PP.cjs +18 -0
  401. package/dist/skills-new-YMRP2HNO.js +18 -0
  402. package/dist/slashCommands-53VYIBJU.js +105 -0
  403. package/dist/slashCommands-BG2RGGZ6.cjs +105 -0
  404. package/dist/status-CQ2IUOVK.cjs +24 -0
  405. package/dist/status-E7IGNVPC.js +24 -0
  406. package/dist/summarizer-DGPHE5IQ.js +17 -0
  407. package/dist/summarizer-JNXLUAQG.cjs +17 -0
  408. package/dist/sync-7C25MOT2.js +22 -0
  409. package/dist/{sync-VU2NSJ4O.js → sync-OCJN4ZSO.js} +3 -3
  410. package/dist/sync-XRP46IVG.cjs +40 -0
  411. package/dist/sync-ZMFVE7T4.cjs +22 -0
  412. package/dist/{teammate-SXRVXNQV.cjs → teammate-D77B6QRT.cjs} +31 -9
  413. package/dist/{teammate-SD26GR37.js → teammate-EZCMHOIL.js} +30 -8
  414. package/dist/templates-ARG2VRWW.cjs +11 -0
  415. package/dist/templates-UGVZV3KJ.js +11 -0
  416. package/dist/theme-KKRDE6P7.cjs +22 -0
  417. package/dist/theme-XF7XIWBQ.js +22 -0
  418. package/dist/tools-3PPTTKFV.js +9 -0
  419. package/dist/tools-THIQA7WC.cjs +9 -0
  420. package/dist/ui/questionModal.cjs +8 -5
  421. package/dist/ui/questionModal.js +7 -4
  422. package/dist/{undo-OL2EDBRY.js → undo-GNUTFXCW.js} +2 -2
  423. package/dist/undo-U4KN7QQM.cjs +10 -0
  424. package/dist/usage-QSTNSDAO.js +24 -0
  425. package/dist/usage-YDEMQBNQ.cjs +24 -0
  426. package/dist/web-3BA2WV37.cjs +37 -0
  427. package/dist/web-6FYGBX5K.js +37 -0
  428. package/dist/workspaceSafety-MDJGHK6D.cjs +9 -0
  429. package/dist/workspaceSafety-XOUMUBVB.js +9 -0
  430. package/dist/yolo-GF2YD7ZI.js +9 -0
  431. package/dist/yolo-OGDA7HNC.cjs +9 -0
  432. package/dist/yoloMode-3DJDA75U.cjs +17 -0
  433. package/dist/yoloMode-4JOOSU26.js +17 -0
  434. package/package.json +51 -49
  435. package/dist/AgentRegistry-HRPN6ZOF.cjs +0 -10
  436. package/dist/CommunitySkillsCache-KE435RAR.cjs +0 -8
  437. package/dist/GitHubRegistryFetcher-I45SESIL.cjs +0 -7
  438. package/dist/LearnAdvisor-FLBA6FDD.js +0 -9
  439. package/dist/LearnAdvisor-GG3CXQF3.cjs +0 -9
  440. package/dist/MemoryManager-2LQPIYVE.cjs +0 -8
  441. package/dist/PermissionManager-X57BXHJ6.cjs +0 -11
  442. package/dist/ProviderFactory-KPJOGQWF.cjs +0 -9
  443. package/dist/SessionManager-YBJAZXNO.cjs +0 -10
  444. package/dist/SkillsRegistry-7O72A6TZ.cjs +0 -9
  445. package/dist/SubAgent-JT4HZHN7.js +0 -11
  446. package/dist/SubAgent-VPNYDWAU.cjs +0 -11
  447. package/dist/SyncApiClient-HQXJL5BT.cjs +0 -11
  448. package/dist/about-4DB5KTHW.js +0 -12
  449. package/dist/about-LXAOXZFT.cjs +0 -12
  450. package/dist/actionExecutor-23JB2WUC.js +0 -19
  451. package/dist/actionExecutor-X5UEZSKH.cjs +0 -19
  452. package/dist/add-dir-YC37DMSF.cjs +0 -10
  453. package/dist/agents-YF3BSUU5.js +0 -12
  454. package/dist/agents-ZOUHPMYR.cjs +0 -12
  455. package/dist/agents-new-HSH4GQPG.js +0 -14
  456. package/dist/agents-new-VYUDOCE7.cjs +0 -14
  457. package/dist/autoSkill-X5W52WOE.cjs +0 -20
  458. package/dist/automode-SJGM7VEI.cjs +0 -10
  459. package/dist/chunk-ALYU6VTM.js +0 -105
  460. package/dist/chunk-B53A2NM2.js +0 -2030
  461. package/dist/chunk-BJXSNT46.js +0 -100
  462. package/dist/chunk-CB4E2T5N.cjs +0 -312
  463. package/dist/chunk-DNUOXBHL.js +0 -539
  464. package/dist/chunk-EFX2QSZX.cjs +0 -33
  465. package/dist/chunk-GCXYXLRA.cjs +0 -111
  466. package/dist/chunk-H2ZRHQQV.js +0 -33
  467. package/dist/chunk-HNRPK5MY.cjs +0 -85
  468. package/dist/chunk-HVKOZ2VP.cjs +0 -115
  469. package/dist/chunk-JJLYWH5Y.cjs +0 -100
  470. package/dist/chunk-LWUJFGOZ.js +0 -115
  471. package/dist/chunk-MERYP6AM.cjs +0 -539
  472. package/dist/chunk-MZAPWNAC.cjs +0 -207
  473. package/dist/chunk-NTSDP2WB.js +0 -226
  474. package/dist/chunk-OUZQXMHL.cjs +0 -226
  475. package/dist/chunk-PGESAU2W.cjs +0 -2030
  476. package/dist/chunk-SYVYLZZF.cjs +0 -24
  477. package/dist/chunk-SZOLA6FR.js +0 -111
  478. package/dist/chunk-VWDHR4HV.js +0 -168
  479. package/dist/chunk-Y45G6ZO5.cjs +0 -168
  480. package/dist/chunk-YRLYSQEQ.cjs +0 -105
  481. package/dist/chunk-ZYVS43MU.js +0 -312
  482. package/dist/clear-GK4IEUUS.cjs +0 -12
  483. package/dist/communityInstaller-XXC7RLE4.cjs +0 -19
  484. package/dist/completion-HWABSAEL.js +0 -14
  485. package/dist/completion-IUUVQG4D.cjs +0 -14
  486. package/dist/config-HF7WOLZF.cjs +0 -18
  487. package/dist/constants-PEO3P2SJ.cjs +0 -21
  488. package/dist/export-QJAV2FCZ.js +0 -12
  489. package/dist/export-XSRFXGWU.cjs +0 -12
  490. package/dist/feedback-4TCIL3ML.cjs +0 -15
  491. package/dist/feedback-SJ6VVEY3.js +0 -15
  492. package/dist/filesystem-W56QZUJF.cjs +0 -10
  493. package/dist/help-ISBVQL3S.cjs +0 -12
  494. package/dist/history-XQ4GTSFU.cjs +0 -14
  495. package/dist/hooks-CJNKJ5PF.js +0 -13
  496. package/dist/hooks-UTMBTAXT.cjs +0 -13
  497. package/dist/i18n-N7QQ7A5M.cjs +0 -33
  498. package/dist/ide-RTA4UJV4.js +0 -12
  499. package/dist/ide-VWVOLIFF.cjs +0 -12
  500. package/dist/immediateCommandRouter-BW34JNXL.js +0 -9
  501. package/dist/immediateCommandRouter-SHOVNB5X.cjs +0 -9
  502. package/dist/import-ZLJVONXH.cjs +0 -10
  503. package/dist/init-TBKAB4LZ.cjs +0 -10
  504. package/dist/language-MDSHEXHB.cjs +0 -18
  505. package/dist/language-PXTQSHIG.js +0 -18
  506. package/dist/learn-623TW5EK.cjs +0 -20
  507. package/dist/learn-BCPV7GM2.js +0 -20
  508. package/dist/localProjectPermissions-BHQXEWZJ.cjs +0 -18
  509. package/dist/localProjectPermissions-GMOUYQM6.js +0 -18
  510. package/dist/login-QMVEETWJ.js +0 -20
  511. package/dist/login-QYMXAL3K.cjs +0 -20
  512. package/dist/logout-2CMTDAOJ.js +0 -18
  513. package/dist/logout-ZOHVZAUK.cjs +0 -18
  514. package/dist/mcp-IUVKK65S.js +0 -18
  515. package/dist/mcp-TXC7PYG3.cjs +0 -18
  516. package/dist/memory-WRIHDEPK.cjs +0 -10
  517. package/dist/model-RLP75SF5.cjs +0 -10
  518. package/dist/new-HLSFL6A4.cjs +0 -12
  519. package/dist/permissions-GP6FTGZ2.js +0 -13
  520. package/dist/permissions-O6EKKPOG.cjs +0 -13
  521. package/dist/plan-MCAXDIM2.cjs +0 -11
  522. package/dist/quit-TQX6GXA5.cjs +0 -10
  523. package/dist/repeat-BSPS5TWD.cjs +0 -13
  524. package/dist/resume-2GOPDLL4.cjs +0 -13
  525. package/dist/resume-37IUVDA6.js +0 -13
  526. package/dist/search-7KUSHIBL.cjs +0 -17
  527. package/dist/search-OJGDRIMA.js +0 -17
  528. package/dist/sessions-CYYCHSQG.cjs +0 -10
  529. package/dist/settings-2D7CAO66.cjs +0 -30
  530. package/dist/settings-BXR6SBJP.js +0 -30
  531. package/dist/share-BXQY5IQU.js +0 -14
  532. package/dist/share-OSFXZBGS.cjs +0 -14
  533. package/dist/skills-FL6O6AOM.cjs +0 -26
  534. package/dist/skills-PNKQZRNK.js +0 -26
  535. package/dist/skills-new-XFMEHHIF.cjs +0 -15
  536. package/dist/skills-new-ZNZPHUKS.js +0 -15
  537. package/dist/slashCommands-LLCNPK3X.js +0 -76
  538. package/dist/slashCommands-RXZZS6RE.cjs +0 -76
  539. package/dist/status-BCECUJXT.cjs +0 -11
  540. package/dist/status-EFO7MQU3.js +0 -11
  541. package/dist/sync-IJYJ6KKM.js +0 -18
  542. package/dist/sync-LFT6SBPF.cjs +0 -18
  543. package/dist/sync-U7SDPBNZ.cjs +0 -40
  544. package/dist/theme-AWBHSG7J.cjs +0 -18
  545. package/dist/theme-TQLBPJ2E.js +0 -18
  546. package/dist/undo-IBBGP7A2.cjs +0 -10
@@ -0,0 +1,124 @@
1
+ // src/permissions/yoloMode.ts
2
+ var DEFAULT_YOLO_FILE_TOOLS = [
3
+ "read_file",
4
+ "write_file",
5
+ "list_dir",
6
+ "file_search",
7
+ "grep_search",
8
+ "move_path",
9
+ "copy_path",
10
+ "run_command",
11
+ "shell"
12
+ ];
13
+ function getDefaultYoloPattern() {
14
+ return "allow:*";
15
+ }
16
+ function normalizeYoloInput(pattern) {
17
+ if (pattern === void 0 || pattern === false) {
18
+ return void 0;
19
+ }
20
+ if (pattern === true) {
21
+ return getDefaultYoloPattern();
22
+ }
23
+ const trimmed = pattern.trim();
24
+ return trimmed.length > 0 ? trimmed : getDefaultYoloPattern();
25
+ }
26
+ function parseYoloPattern(pattern) {
27
+ const trimmed = pattern.trim();
28
+ if (trimmed.length === 0) {
29
+ throw new Error("YOLO pattern cannot be empty");
30
+ }
31
+ if (trimmed === "true") {
32
+ return { mode: "allow", tools: ["*"] };
33
+ }
34
+ const colonIndex = trimmed.indexOf(":");
35
+ if (colonIndex === -1) {
36
+ throw new Error(
37
+ `Invalid YOLO pattern "${pattern}". Expected format: allow:<tools> or deny:<tools>`
38
+ );
39
+ }
40
+ const mode = trimmed.slice(0, colonIndex).trim().toLowerCase();
41
+ const toolsPart = trimmed.slice(colonIndex + 1);
42
+ if (mode !== "allow" && mode !== "deny") {
43
+ throw new Error(
44
+ `Invalid YOLO mode "${mode}". Must be "allow" or "deny".`
45
+ );
46
+ }
47
+ const tools = toolsPart.split(",").map((t) => t.trim()).filter((t) => t.length > 0);
48
+ if (tools.length === 0) {
49
+ throw new Error("YOLO pattern must specify at least one tool");
50
+ }
51
+ return { mode, tools };
52
+ }
53
+ function isToolAllowedByYolo(toolName, pattern) {
54
+ const isWildcard = pattern.tools.includes("*");
55
+ const isListed = pattern.tools.includes(toolName);
56
+ if (pattern.mode === "allow") {
57
+ return isWildcard || isListed;
58
+ }
59
+ if (isWildcard) {
60
+ return false;
61
+ }
62
+ return !isListed;
63
+ }
64
+ function buildPermissionSettingsFromYolo(pattern) {
65
+ if (pattern.mode === "allow" && pattern.tools.includes("*")) {
66
+ return { mode: "unrestricted" };
67
+ }
68
+ if (pattern.mode === "allow") {
69
+ const allowPatterns = pattern.tools.map((tool) => ({ kind: tool }));
70
+ const pathAffectingTools = /* @__PURE__ */ new Set(["read_file", "write_file", "multi_file_edit", "move_path", "copy_path"]);
71
+ const defaultTools = new Set(DEFAULT_YOLO_FILE_TOOLS);
72
+ const patternPathTools = pattern.tools.filter((tool) => pathAffectingTools.has(tool));
73
+ const allPathToolsAreDefault = patternPathTools.every((tool) => defaultTools.has(tool));
74
+ return {
75
+ allowPatterns,
76
+ allPathsAllowed: allPathToolsAreDefault
77
+ };
78
+ }
79
+ return {
80
+ denyPatterns: pattern.tools.map((tool) => ({ kind: tool }))
81
+ };
82
+ }
83
+ var YoloTimer = class {
84
+ startTime;
85
+ durationMs;
86
+ constructor(timeoutSeconds) {
87
+ this.startTime = Date.now();
88
+ this.durationMs = timeoutSeconds * 1e3;
89
+ }
90
+ /** Whether the timer is still active (within the timeout window). */
91
+ isActive() {
92
+ if (this.durationMs <= 0) {
93
+ return false;
94
+ }
95
+ return Date.now() - this.startTime < this.durationMs;
96
+ }
97
+ /** Seconds remaining before the timer expires (minimum 0). */
98
+ remainingSeconds() {
99
+ if (this.durationMs <= 0) {
100
+ return 0;
101
+ }
102
+ const elapsed = Date.now() - this.startTime;
103
+ const remaining = Math.max(0, this.durationMs - elapsed);
104
+ return Math.ceil(remaining / 1e3);
105
+ }
106
+ };
107
+
108
+ export {
109
+ getDefaultYoloPattern,
110
+ normalizeYoloInput,
111
+ parseYoloPattern,
112
+ isToolAllowedByYolo,
113
+ buildPermissionSettingsFromYolo,
114
+ YoloTimer
115
+ };
116
+ /**
117
+ * YOLO Mode - Granular Auto-Approve with Timeout
118
+ *
119
+ * Provides pattern-based tool allow/deny and time-bounded auto-approve.
120
+ *
121
+ * @license
122
+ * Copyright 2025 Autohand AI LLC
123
+ * SPDX-License-Identifier: Apache-2.0
124
+ */
@@ -1,30 +1,40 @@
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
3
 
4
- var _chunkRKJTGGMUcjs = require('./chunk-RKJTGGMU.cjs');
4
+ var _chunkWKRDBCP2cjs = require('./chunk-WKRDBCP2.cjs');
5
5
 
6
6
 
7
7
 
8
- var _chunkZYQMLKOKcjs = require('./chunk-ZYQMLKOK.cjs');
8
+ var _chunkCK4HAHVYcjs = require('./chunk-CK4HAHVY.cjs');
9
9
 
10
10
 
11
- var _chunkCB4E2T5Ncjs = require('./chunk-CB4E2T5N.cjs');
11
+ var _chunkX5P6QQOBcjs = require('./chunk-X5P6QQOB.cjs');
12
12
 
13
13
  // src/commands/search.ts
14
14
  var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
15
15
  async function search(ctx) {
16
- const currentConfig = _chunkRKJTGGMUcjs.getSearchConfig.call(void 0, );
16
+ const currentConfig = _chunkWKRDBCP2cjs.getSearchConfig.call(void 0, );
17
17
  const config = ctx.config;
18
18
  console.log(_chalk2.default.bold("\nWeb Search Configuration\n"));
19
19
  console.log(_chalk2.default.gray(`Current provider: ${_chalk2.default.cyan(currentConfig.provider)}`));
20
20
  const braveKeySet = !!(currentConfig.braveApiKey || process.env.BRAVE_SEARCH_API_KEY);
21
21
  const parallelKeySet = !!(currentConfig.parallelApiKey || process.env.PARALLEL_API_KEY);
22
+ const exaKeySet = !!(currentConfig.exaApiKey || process.env.EXA_API_KEY);
22
23
  console.log(_chalk2.default.gray(`Brave API key: ${braveKeySet ? _chalk2.default.green("configured") : _chalk2.default.yellow("not set")}`));
23
24
  console.log(_chalk2.default.gray(`Parallel API key: ${parallelKeySet ? _chalk2.default.green("configured") : _chalk2.default.yellow("not set")}`));
25
+ console.log(_chalk2.default.gray(`Exa API key: ${exaKeySet ? _chalk2.default.green("configured") : _chalk2.default.yellow("not set")}`));
24
26
  console.log();
25
27
  const providerOptions = [
26
28
  {
27
- label: `Google ${_chalk2.default.gray("(no API key required, recommended default)")}`,
29
+ label: `Browser Profile ${_chalk2.default.gray("(uses your Chrome/Brave cookies - no API key)")}`,
30
+ value: "browser-profile"
31
+ },
32
+ {
33
+ label: `Exa.ai ${_chalk2.default.gray("(requires API key)")} ${exaKeySet ? _chalk2.default.green("\u2713") : ""}`,
34
+ value: "exa"
35
+ },
36
+ {
37
+ label: `Google ${_chalk2.default.gray("(no API key required)")}`,
28
38
  value: "google"
29
39
  },
30
40
  {
@@ -41,7 +51,7 @@ async function search(ctx) {
41
51
  }
42
52
  ];
43
53
  try {
44
- const result = await _chunkZYQMLKOKcjs.showModal.call(void 0, {
54
+ const result = await _chunkCK4HAHVYcjs.showModal.call(void 0, {
45
55
  title: "Select search provider:",
46
56
  options: providerOptions,
47
57
  initialIndex: providerOptions.findIndex((c) => c.value === currentConfig.provider)
@@ -53,12 +63,25 @@ async function search(ctx) {
53
63
  const provider = result.value;
54
64
  let braveApiKey = currentConfig.braveApiKey;
55
65
  let parallelApiKey = currentConfig.parallelApiKey;
66
+ let exaApiKey = currentConfig.exaApiKey;
67
+ if (provider === "exa" && !exaKeySet) {
68
+ console.log(_chalk2.default.gray("\nGet your Exa.ai API key at: https://exa.ai\n"));
69
+ const apiKey = await _chunkCK4HAHVYcjs.showPassword.call(void 0, {
70
+ title: "Enter Exa.ai API key:"
71
+ });
72
+ if (_optionalChain([apiKey, 'optionalAccess', _ => _.trim, 'call', _2 => _2()])) {
73
+ exaApiKey = apiKey.trim();
74
+ } else {
75
+ console.log(_chalk2.default.yellow("No API key entered. Exa.ai Search will not work without an API key."));
76
+ return null;
77
+ }
78
+ }
56
79
  if (provider === "brave" && !braveKeySet) {
57
80
  console.log(_chalk2.default.gray("\nGet your free Brave Search API key at: https://brave.com/search/api/\n"));
58
- const apiKey = await _chunkZYQMLKOKcjs.showPassword.call(void 0, {
81
+ const apiKey = await _chunkCK4HAHVYcjs.showPassword.call(void 0, {
59
82
  title: "Enter Brave Search API key:"
60
83
  });
61
- if (_optionalChain([apiKey, 'optionalAccess', _ => _.trim, 'call', _2 => _2()])) {
84
+ if (_optionalChain([apiKey, 'optionalAccess', _3 => _3.trim, 'call', _4 => _4()])) {
62
85
  braveApiKey = apiKey.trim();
63
86
  } else {
64
87
  console.log(_chalk2.default.yellow("No API key entered. Brave Search will not work without an API key."));
@@ -67,28 +90,30 @@ async function search(ctx) {
67
90
  }
68
91
  if (provider === "parallel" && !parallelKeySet) {
69
92
  console.log(_chalk2.default.gray("\nGet your Parallel.ai API key at: https://platform.parallel.ai\n"));
70
- const apiKey = await _chunkZYQMLKOKcjs.showPassword.call(void 0, {
93
+ const apiKey = await _chunkCK4HAHVYcjs.showPassword.call(void 0, {
71
94
  title: "Enter Parallel.ai API key:"
72
95
  });
73
- if (_optionalChain([apiKey, 'optionalAccess', _3 => _3.trim, 'call', _4 => _4()])) {
96
+ if (_optionalChain([apiKey, 'optionalAccess', _5 => _5.trim, 'call', _6 => _6()])) {
74
97
  parallelApiKey = apiKey.trim();
75
98
  } else {
76
99
  console.log(_chalk2.default.yellow("No API key entered. Parallel.ai Search will not work without an API key."));
77
100
  return null;
78
101
  }
79
102
  }
80
- _chunkRKJTGGMUcjs.configureSearch.call(void 0, {
103
+ _chunkWKRDBCP2cjs.configureSearch.call(void 0, {
81
104
  provider,
82
105
  braveApiKey,
83
- parallelApiKey
106
+ parallelApiKey,
107
+ exaApiKey
84
108
  });
85
109
  if (config) {
86
110
  config.search = {
87
111
  provider,
88
112
  braveApiKey,
89
- parallelApiKey
113
+ parallelApiKey,
114
+ exaApiKey
90
115
  };
91
- await _chunkCB4E2T5Ncjs.saveConfig.call(void 0, config);
116
+ await _chunkX5P6QQOBcjs.saveConfig.call(void 0, config);
92
117
  console.log(_chalk2.default.green(`
93
118
  \u2713 Search provider set to ${provider} and saved to config`));
94
119
  } else {
@@ -96,6 +121,12 @@ async function search(ctx) {
96
121
  \u2713 Search provider set to ${provider} (session only)`));
97
122
  }
98
123
  switch (provider) {
124
+ case "browser-profile":
125
+ console.log(_chalk2.default.gray("Browser Profile Search is now active. Uses your Chrome/Brave cookies for better results."));
126
+ break;
127
+ case "exa":
128
+ console.log(_chalk2.default.gray("Exa.ai Search is now active with neural search capabilities."));
129
+ break;
99
130
  case "google":
100
131
  console.log(_chalk2.default.gray("Google Search is now active. No API key required."));
101
132
  break;
@@ -116,7 +147,7 @@ async function search(ctx) {
116
147
  }
117
148
  var metadata = {
118
149
  command: "/search",
119
- description: "configure web search provider (google, brave, duckduckgo, parallel)",
150
+ description: "configure web search provider (browser-profile, exa, google, brave, duckduckgo, parallel)",
120
151
  implemented: true
121
152
  };
122
153
 
@@ -0,0 +1,360 @@
1
+ import {
2
+ getAssistantChatLogContent
3
+ } from "./chunk-RS2E32YB.js";
4
+ import {
5
+ package_default
6
+ } from "./chunk-JB3JCYBJ.js";
7
+ import {
8
+ AUTOHAND_FILES
9
+ } from "./chunk-SHRLFX6F.js";
10
+
11
+ // src/commands/go.ts
12
+ import os from "os";
13
+ import chalk from "chalk";
14
+ import QRCode from "qrcode";
15
+ import terminalLink from "terminal-link";
16
+
17
+ // src/mobile/MobileHandoffClient.ts
18
+ import crypto from "crypto";
19
+ import fs from "fs-extra";
20
+ import path from "path";
21
+ var DEFAULT_API_BASE_URL = "https://api.autohand.ai";
22
+ var DEFAULT_TIMEOUT_MS = 1e4;
23
+ function getMobileApiBaseUrl(config) {
24
+ return (config?.api?.baseUrl || process.env.AUTOHAND_API_URL || DEFAULT_API_BASE_URL).replace(/\/+$/, "");
25
+ }
26
+ var MobileHandoffClient = class {
27
+ baseUrl;
28
+ timeoutMs;
29
+ constructor(config = {}) {
30
+ this.baseUrl = (config.baseUrl || DEFAULT_API_BASE_URL).replace(/\/+$/, "");
31
+ this.timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS;
32
+ }
33
+ async getDeviceId() {
34
+ try {
35
+ await fs.ensureDir(path.dirname(AUTOHAND_FILES.deviceId));
36
+ if (await fs.pathExists(AUTOHAND_FILES.deviceId)) {
37
+ const existing = (await fs.readFile(AUTOHAND_FILES.deviceId, "utf8")).trim();
38
+ if (existing) return existing;
39
+ }
40
+ const next = crypto.randomUUID();
41
+ await fs.writeFile(AUTOHAND_FILES.deviceId, next);
42
+ return next;
43
+ } catch {
44
+ return crypto.randomUUID();
45
+ }
46
+ }
47
+ async registerDevice(token, payload) {
48
+ await this.request("/v1/devices/register", token, {
49
+ method: "POST",
50
+ body: JSON.stringify({
51
+ deviceId: payload.deviceId,
52
+ clientType: payload.clientType ?? "cli",
53
+ agentName: payload.agentName,
54
+ metadata: payload.metadata
55
+ }),
56
+ headers: {
57
+ "X-Device-ID": payload.deviceId
58
+ }
59
+ });
60
+ }
61
+ async createPairing(token, payload) {
62
+ const data = await this.request(
63
+ "/v1/mobile/pairings",
64
+ token,
65
+ {
66
+ method: "POST",
67
+ body: JSON.stringify(payload),
68
+ headers: {
69
+ "X-CLI-Version": package_default.version,
70
+ "X-Device-ID": payload.deviceId
71
+ }
72
+ }
73
+ );
74
+ if (data.success !== true || !data.pairing?.pairingUrl) {
75
+ throw new Error(data.error || "Invalid mobile pairing response");
76
+ }
77
+ return data.pairing;
78
+ }
79
+ async sendRelayHeartbeat(token, payload) {
80
+ await this.request(`/v1/mobile/sessions/${encodeURIComponent(payload.sessionId)}/heartbeat`, token, {
81
+ method: "POST",
82
+ body: JSON.stringify({
83
+ deviceId: payload.deviceId,
84
+ pairingId: payload.pairingId,
85
+ mode: payload.mode
86
+ }),
87
+ headers: {
88
+ "X-Device-ID": payload.deviceId
89
+ }
90
+ });
91
+ }
92
+ async claimWork(token, deviceId) {
93
+ const data = await this.request(
94
+ "/v1/work/claim",
95
+ token,
96
+ {
97
+ method: "POST",
98
+ body: JSON.stringify({ deviceId }),
99
+ headers: {
100
+ "X-Device-ID": deviceId
101
+ },
102
+ allowNotFound: true
103
+ }
104
+ );
105
+ if (data.success === false && data.error === "No work available") {
106
+ return null;
107
+ }
108
+ if (!data.success || !data.work) {
109
+ throw new Error(data.error || "Invalid work claim response");
110
+ }
111
+ return data.work;
112
+ }
113
+ async request(path2, token, options) {
114
+ const controller = new AbortController();
115
+ const timeout = setTimeout(() => controller.abort(), this.timeoutMs);
116
+ try {
117
+ const response = await fetch(`${this.baseUrl}${path2}`, {
118
+ method: options.method,
119
+ headers: {
120
+ Authorization: `Bearer ${token}`,
121
+ "Content-Type": "application/json",
122
+ ...options.headers
123
+ },
124
+ body: options.body,
125
+ signal: controller.signal
126
+ });
127
+ if (options.allowNotFound && response.status === 404) {
128
+ const data = await response.json().catch(() => ({ success: false, error: "No work available" }));
129
+ return data;
130
+ }
131
+ if (!response.ok) {
132
+ const text = await response.text().catch(() => "Unknown error");
133
+ throw new Error(`API error: ${response.status} ${text}`);
134
+ }
135
+ return await response.json();
136
+ } catch (error) {
137
+ if (error.name === "AbortError") {
138
+ throw new Error("Request timeout");
139
+ }
140
+ throw error;
141
+ } finally {
142
+ clearTimeout(timeout);
143
+ }
144
+ }
145
+ };
146
+
147
+ // src/mobile/MobileRelay.ts
148
+ var activeRelay = null;
149
+ function startMobileRelay(options) {
150
+ stopMobileRelay();
151
+ activeRelay = {
152
+ deviceId: options.deviceId,
153
+ timer: setInterval(() => {
154
+ void pollOnce(options);
155
+ }, Math.max(options.pollIntervalMs, 1e3)),
156
+ polling: false
157
+ };
158
+ activeRelay.timer.unref?.();
159
+ void pollOnce(options);
160
+ }
161
+ function stopMobileRelay() {
162
+ if (!activeRelay) return;
163
+ clearInterval(activeRelay.timer);
164
+ activeRelay = null;
165
+ }
166
+ async function pollOnce(options) {
167
+ if (!activeRelay || activeRelay.deviceId !== options.deviceId || activeRelay.polling) {
168
+ return;
169
+ }
170
+ activeRelay.polling = true;
171
+ try {
172
+ try {
173
+ await options.client.sendRelayHeartbeat(options.token, {
174
+ sessionId: options.sessionId,
175
+ deviceId: options.deviceId,
176
+ pairingId: options.pairingId,
177
+ mode: options.mode
178
+ });
179
+ } catch (error) {
180
+ options.onError?.(error);
181
+ }
182
+ const work = await options.client.claimWork(options.token, options.deviceId);
183
+ if (work?.prompt) {
184
+ options.enqueueInstruction(work.prompt);
185
+ }
186
+ } catch (error) {
187
+ options.onError?.(error);
188
+ } finally {
189
+ if (activeRelay?.deviceId === options.deviceId) {
190
+ activeRelay.polling = false;
191
+ }
192
+ }
193
+ }
194
+
195
+ // src/commands/go.ts
196
+ var metadata = {
197
+ command: "/go",
198
+ description: "pair this session with the Autohand Code iOS app",
199
+ implemented: true
200
+ };
201
+ var MAX_MOBILE_SNAPSHOT_MESSAGES = 24;
202
+ function formatUrl(url) {
203
+ return terminalLink.isSupported ? terminalLink(url, url) : chalk.cyan.underline(url);
204
+ }
205
+ function formatExpiry(value) {
206
+ const date = new Date(value);
207
+ if (Number.isNaN(date.getTime())) return value;
208
+ return date.toLocaleString();
209
+ }
210
+ function nativeAppUrl(pairingUrl) {
211
+ const url = new URL(pairingUrl);
212
+ const nativeUrl = new URL("autohand-code://go");
213
+ const pairingId = url.searchParams.get("pairing");
214
+ const token = url.searchParams.get("token");
215
+ if (pairingId) nativeUrl.searchParams.set("pairing", pairingId);
216
+ if (token) nativeUrl.searchParams.set("token", token);
217
+ return nativeUrl.toString();
218
+ }
219
+ function buildMobileSessionSnapshot(session) {
220
+ const messages = [];
221
+ for (const message of session.getMessages()) {
222
+ if (message.role === "user") {
223
+ const content = message.content.trim();
224
+ if (content) {
225
+ messages.push({ role: "user", content, timestamp: message.timestamp });
226
+ }
227
+ continue;
228
+ }
229
+ if (message.role === "assistant") {
230
+ const content = getAssistantChatLogContent(message.content);
231
+ if (content) {
232
+ messages.push({ role: "assistant", content, timestamp: message.timestamp });
233
+ }
234
+ }
235
+ }
236
+ const recentMessages = messages.slice(-MAX_MOBILE_SNAPSHOT_MESSAGES);
237
+ const firstUserMessage = messages.find((message) => message.role === "user");
238
+ const title = firstUserMessage?.content ? firstUserMessage.content.replace(/\s+/g, " ").slice(0, 80) : `Continue ${session.metadata.projectName}`;
239
+ return {
240
+ title,
241
+ summary: session.metadata.summary,
242
+ messageCount: session.metadata.messageCount,
243
+ lastActivity: session.metadata.lastActiveAt,
244
+ messages: recentMessages
245
+ };
246
+ }
247
+ function parseMode(args, canSteer) {
248
+ if (args.includes("--queue")) return "queue";
249
+ if (args.includes("--steer")) return "steer";
250
+ return canSteer ? "steer" : "queue";
251
+ }
252
+ async function go(ctx, args = []) {
253
+ const mode = parseMode(args, Boolean(ctx.enqueueInstruction));
254
+ if (mode === "steer" && !ctx.enqueueInstruction) {
255
+ return [
256
+ chalk.yellow("Steer mode requires an interactive CLI session."),
257
+ chalk.gray("Run /go --queue to create a durable queue-only handoff from this mode.")
258
+ ].join("\n");
259
+ }
260
+ const token = ctx.config?.auth?.token;
261
+ if (!token) {
262
+ return [
263
+ chalk.yellow("Sign in first with /login."),
264
+ chalk.gray("Then run /go again to pair this laptop session with your phone.")
265
+ ].join("\n");
266
+ }
267
+ const session = ctx.currentSession ?? ctx.sessionManager.getCurrentSession();
268
+ if (!session) {
269
+ return [
270
+ chalk.yellow("No active session to pair."),
271
+ chalk.gray("Start a conversation, then run /go from the project you want to control remotely.")
272
+ ].join("\n");
273
+ }
274
+ const client = ctx.client ?? new MobileHandoffClient({
275
+ baseUrl: getMobileApiBaseUrl(ctx.config)
276
+ });
277
+ try {
278
+ const deviceId = await client.getDeviceId();
279
+ await client.registerDevice(token, {
280
+ deviceId,
281
+ clientType: "cli",
282
+ agentName: `${os.hostname()} Autohand Code`,
283
+ metadata: {
284
+ workspacePath: ctx.workspaceRoot,
285
+ projectName: session.metadata.projectName,
286
+ sessionId: session.metadata.sessionId,
287
+ model: ctx.model,
288
+ provider: ctx.provider,
289
+ platform: process.platform,
290
+ hostname: os.hostname(),
291
+ client: session.metadata.client,
292
+ clientVersion: session.metadata.clientVersion
293
+ }
294
+ });
295
+ const pairing = await client.createPairing(token, {
296
+ deviceId,
297
+ sessionId: session.metadata.sessionId,
298
+ workspacePath: ctx.workspaceRoot,
299
+ projectName: session.metadata.projectName,
300
+ model: ctx.model,
301
+ provider: ctx.provider,
302
+ capabilities: ["prompt", "approval", "notifications"],
303
+ metadata: {
304
+ platform: process.platform,
305
+ hostname: os.hostname(),
306
+ client: session.metadata.client,
307
+ clientVersion: session.metadata.clientVersion,
308
+ sessionSnapshot: JSON.stringify(buildMobileSessionSnapshot(session))
309
+ }
310
+ });
311
+ if (mode === "steer" && ctx.enqueueInstruction) {
312
+ startMobileRelay({
313
+ client,
314
+ token,
315
+ deviceId,
316
+ sessionId: session.metadata.sessionId,
317
+ pairingId: pairing.id,
318
+ mode,
319
+ pollIntervalMs: pairing.pollIntervalMs,
320
+ enqueueInstruction: ctx.enqueueInstruction
321
+ });
322
+ }
323
+ const appUrl = nativeAppUrl(pairing.pairingUrl);
324
+ const qr = await QRCode.toString(pairing.pairingUrl, {
325
+ type: "utf8",
326
+ errorCorrectionLevel: "M"
327
+ });
328
+ return [
329
+ "",
330
+ chalk.bold("Autohand Code mobile handoff"),
331
+ chalk.gray("Scan this with the iOS app to continue this session from your phone."),
332
+ "",
333
+ qr,
334
+ "",
335
+ `${chalk.gray("Scan or open:")} ${formatUrl(pairing.pairingUrl)}`,
336
+ `${chalk.gray("Simulator fallback:")} ${formatUrl(appUrl)}`,
337
+ `${chalk.gray("Project:")} ${chalk.cyan(session.metadata.projectName)}`,
338
+ `${chalk.gray("Session:")} ${chalk.cyan(session.metadata.sessionId)}`,
339
+ `${chalk.gray("Mode:")} ${mode === "steer" ? chalk.green("steer live") : chalk.yellow("queue")}`,
340
+ `${chalk.gray("Relay:")} ${mode === "steer" ? chalk.green("listening for mobile prompts") : chalk.yellow("prompts will wait in the queue")}`,
341
+ `${chalk.gray("Expires:")} ${chalk.cyan(formatExpiry(pairing.expiresAt))}`,
342
+ ""
343
+ ].join("\n");
344
+ } catch (error) {
345
+ return [
346
+ chalk.red("Could not create mobile handoff."),
347
+ chalk.gray(error.message)
348
+ ].join("\n");
349
+ }
350
+ }
351
+
352
+ export {
353
+ metadata,
354
+ go
355
+ };
356
+ /**
357
+ * @license
358
+ * Copyright 2026 Autohand AI LLC
359
+ * SPDX-License-Identifier: Apache-2.0
360
+ */
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AUTOHAND_PATHS
3
- } from "./chunk-EGFT4PGW.js";
3
+ } from "./chunk-SHRLFX6F.js";
4
4
 
5
5
  // src/core/agents/AgentRegistry.ts
6
6
  import fs from "fs/promises";
@@ -50,9 +50,11 @@ function parseMarkdownAgent(content) {
50
50
  };
51
51
  }
52
52
  var AgentRegistry = class _AgentRegistry {
53
+ static instance;
54
+ agents = /* @__PURE__ */ new Map();
55
+ agentsDir;
56
+ externalPaths = [];
53
57
  constructor() {
54
- this.agents = /* @__PURE__ */ new Map();
55
- this.externalPaths = [];
56
58
  this.agentsDir = AUTOHAND_PATHS.agents;
57
59
  }
58
60
  static getInstance() {
@@ -70,6 +72,16 @@ var AgentRegistry = class _AgentRegistry {
70
72
  (p) => p.startsWith("~") ? path.join(os.homedir(), p.slice(1)) : p
71
73
  );
72
74
  }
75
+ /**
76
+ * Apply external agent settings from the loaded Autohand config.
77
+ */
78
+ configureExternalAgents(config) {
79
+ if (config?.enabled !== true) {
80
+ this.setExternalPaths([]);
81
+ return;
82
+ }
83
+ this.setExternalPaths(config.paths ?? []);
84
+ }
73
85
  /**
74
86
  * Get configured external paths
75
87
  */
@@ -159,7 +171,7 @@ var AgentRegistry = class _AgentRegistry {
159
171
  source,
160
172
  description: parsed.description || `Agent ${name}`,
161
173
  systemPrompt: parsed.systemPrompt,
162
- tools: parsed.tools,
174
+ tools: parsed.tools.length > 0 ? parsed.tools : ["*"],
163
175
  model: parsed.model
164
176
  };
165
177
  if (!this.agents.has(name)) {