autohand-cli 0.9.1 → 0.9.2

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 (432) hide show
  1. package/README.md +103 -79
  2. package/dist/AgentRegistry-BBQRODQC.cjs +18 -0
  3. package/dist/AgentRegistry-JBXZUPML.js +18 -0
  4. package/dist/{CommunitySkillsCache-ZACDPD4J.js → CommunitySkillsCache-CI7UN2DX.js} +2 -2
  5. package/dist/CommunitySkillsCache-XTQ6RMTA.cjs +8 -0
  6. package/dist/{HookManager-2S6AHOC3.js → HookManager-BELBPQQI.js} +1 -1
  7. package/dist/{HookManager-TVEQI5ZU.cjs → HookManager-ZL2CLAJW.cjs} +2 -2
  8. package/dist/{ImportWizard-AF2XL6DS.cjs → ImportWizard-U6CIJREW.cjs} +12 -12
  9. package/dist/{ImportWizard-AEBMAKXE.js → ImportWizard-VJFSWSUQ.js} +3 -3
  10. package/dist/LearnAdvisor-LAURA3IB.cjs +9 -0
  11. package/dist/LearnAdvisor-RFOBXFG7.js +9 -0
  12. package/dist/MemoryManager-3A2VRPF2.js +9 -0
  13. package/dist/MemoryManager-UOEQZIDC.cjs +9 -0
  14. package/dist/{NVIDIAProvider-SJPY3ONR.js → NVIDIAProvider-AFNJNWJM.js} +1 -1
  15. package/dist/NVIDIAProvider-L5GTYRCQ.cjs +14 -0
  16. package/dist/{PermissionManager-MT7KBNNR.js → PermissionManager-N2LDSOYF.js} +3 -3
  17. package/dist/PermissionManager-ZNURIEYR.cjs +11 -0
  18. package/dist/ProviderFactory-3BFS65V7.cjs +13 -0
  19. package/dist/{ProviderFactory-RB4RVAF6.js → ProviderFactory-XUT6BSGB.js} +4 -3
  20. package/dist/SessionManager-LGPQIA57.cjs +10 -0
  21. package/dist/{SessionManager-554PHVPC.js → SessionManager-OR4KDDDS.js} +2 -2
  22. package/dist/{SkillsRegistry-NHHMIUYJ.js → SkillsRegistry-IL3GWROU.js} +2 -2
  23. package/dist/SkillsRegistry-PM34DQNA.cjs +9 -0
  24. package/dist/SubAgent-2WG4QQB5.cjs +13 -0
  25. package/dist/SubAgent-ICGN23TQ.js +13 -0
  26. package/dist/{about-3USFSGOH.js → about-OYVGQMJJ.js} +3 -3
  27. package/dist/{about-QR52U5DD.cjs → about-U2BH7HDR.cjs} +4 -4
  28. package/dist/{acp-5Y2W6OZP.js → acp-JWHGXZL5.js} +169 -103
  29. package/dist/{acp-GSYE75OB.cjs → acp-S37JOBCS.cjs} +184 -118
  30. package/dist/{actionExecutor-KHUU3Z3Q.cjs → actionExecutor-2QEPMELQ.cjs} +13 -13
  31. package/dist/{actionExecutor-PLQJZLZV.js → actionExecutor-6NCCORRB.js} +12 -12
  32. package/dist/add-dir-KFUHSIR2.cjs +11 -0
  33. package/dist/{add-dir-HCERJDBR.js → add-dir-MM2BM2Z2.js} +2 -2
  34. package/dist/agent-DUIYLIVN.js +132 -0
  35. package/dist/agent-YYEHGDAK.cjs +132 -0
  36. package/dist/agents-GBGG4CW7.cjs +19 -0
  37. package/dist/agents-ZH34C72F.js +19 -0
  38. package/dist/agents-new-ERXLS7SB.cjs +17 -0
  39. package/dist/{agents-new-7GAQ25EK.js → agents-new-EVTGPTA4.js} +6 -6
  40. package/dist/{autoSkill-66PKCYTW.js → autoSkill-HEWKJ5JV.js} +2 -2
  41. package/dist/autoSkill-YL6PN6AV.cjs +20 -0
  42. package/dist/automode-4BJ7FNPL.cjs +10 -0
  43. package/dist/{automode-BUF3VGXU.js → automode-S4U7A7Q2.js} +2 -2
  44. package/dist/chrome-45ZXHL5N.cjs +22 -0
  45. package/dist/{chrome-Y3T7EIHG.js → chrome-BBSRVG6S.js} +2 -2
  46. package/dist/chrome-IFVZRHAT.cjs +50 -0
  47. package/dist/chrome-MYE6DNA2.js +22 -0
  48. package/dist/{chunk-45CHNQM6.cjs → chunk-24CEJYEG.cjs} +93 -31
  49. package/dist/{chunk-6JWCGQJU.cjs → chunk-255GIVM2.cjs} +6 -6
  50. package/dist/{chunk-D546G7DA.cjs → chunk-2BDSR2OW.cjs} +98 -75
  51. package/dist/{chunk-PGFLPURU.js → chunk-2BPIR7LA.js} +121 -4
  52. package/dist/{chunk-AOKXYGBQ.cjs → chunk-2NY7OHBF.cjs} +41 -26
  53. package/dist/chunk-2WUNHTXL.js +303 -0
  54. package/dist/{chunk-PQBYFEBL.cjs → chunk-34B6ZO6W.cjs} +124 -7
  55. package/dist/{chunk-5JTTM5SC.js → chunk-3BJN7GAH.js} +1 -1
  56. package/dist/{chunk-3UC6DMFI.cjs → chunk-3CAXECWJ.cjs} +15 -15
  57. package/dist/{chunk-YWH55BWK.cjs → chunk-3CBYUBZC.cjs} +6 -9
  58. package/dist/chunk-3DF3GZQ7.js +277 -0
  59. package/dist/{chunk-KASXKDF2.cjs → chunk-3JURXAL6.cjs} +58 -7
  60. package/dist/{chunk-JV5HVCHU.cjs → chunk-3KWAP2Y3.cjs} +88 -9
  61. package/dist/{chunk-WPE2XHVX.js → chunk-3MCK6UBL.js} +1 -1
  62. package/dist/{chunk-U2QUMKCB.js → chunk-3TH7IK4M.js} +62 -9
  63. package/dist/{chunk-YXM6SA7P.js → chunk-3V77OB3W.js} +3 -3
  64. package/dist/{chunk-MZN6JBRZ.cjs → chunk-3Y5UEK7K.cjs} +4 -4
  65. package/dist/{chunk-BP37FVBM.js → chunk-4GPPSBEZ.js} +3 -3
  66. package/dist/{chunk-4XVLNOFA.js → chunk-5CMBAJ6K.js} +20 -3
  67. package/dist/{chunk-PNIAIOMZ.cjs → chunk-5YRXFBYZ.cjs} +35 -6
  68. package/dist/chunk-6AC2TT26.js +156 -0
  69. package/dist/{chunk-PSAH4ZQB.cjs → chunk-6EIQ6A6U.cjs} +2 -2
  70. package/dist/{chunk-YQDI753V.js → chunk-6HSEDXVF.js} +4 -4
  71. package/dist/{chunk-O5GI6SR3.js → chunk-6NUXK62F.js} +1 -1
  72. package/dist/{chunk-HVCIB4SW.cjs → chunk-6TGCAPYH.cjs} +62 -9
  73. package/dist/{chunk-HZWU6IO3.js → chunk-6W3SZCSP.js} +2 -5
  74. package/dist/{chunk-Q3BS6FPM.js → chunk-73LV3DDZ.js} +4 -4
  75. package/dist/{chunk-ZNGRLCFQ.js → chunk-7BGGLIQF.js} +83 -1
  76. package/dist/{chunk-ZNYZB7XY.cjs → chunk-7EEK7CRR.cjs} +83 -1
  77. package/dist/{chunk-HK5A54AV.cjs → chunk-7TO3PDMV.cjs} +48 -4
  78. package/dist/chunk-7UU22RSH.cjs +277 -0
  79. package/dist/{chunk-XNIMSVS6.cjs → chunk-A3GAM6FM.cjs} +11 -11
  80. package/dist/{chunk-W5QLA6WP.cjs → chunk-A7DJU75T.cjs} +8 -8
  81. package/dist/{chunk-7XTUL7ZD.cjs → chunk-AAAO4ERQ.cjs} +9 -9
  82. package/dist/{chunk-M5DK524Z.js → chunk-AAJLMP57.js} +2 -2
  83. package/dist/chunk-ABR756QN.js +529 -0
  84. package/dist/{chunk-OIGYWOL6.js → chunk-APFGDIPD.js} +3 -1
  85. package/dist/{chunk-PTTZI4QZ.js → chunk-APQYRMYL.js} +4 -4
  86. package/dist/{chunk-CO2AADYU.cjs → chunk-AZKOIF2G.cjs} +55 -17
  87. package/dist/{chunk-P6SLT2F4.cjs → chunk-AZLHUPNC.cjs} +2 -2
  88. package/dist/chunk-B55VCYSQ.cjs +30 -0
  89. package/dist/{chunk-JMJRFSNJ.js → chunk-BLQUMSM3.js} +1 -1
  90. package/dist/{chunk-MGNXABSU.cjs → chunk-BXKPX6K4.cjs} +9 -9
  91. package/dist/{chunk-MQQH4XQH.cjs → chunk-C66FN2LP.cjs} +4 -4
  92. package/dist/{chunk-CECH6QQP.js → chunk-CH7KUFAS.js} +10 -10
  93. package/dist/{chunk-PIXQ2AVM.cjs → chunk-CILSXOPI.cjs} +17 -17
  94. package/dist/{chunk-IEPLQ47J.js → chunk-CM24K6ZT.js} +89 -12
  95. package/dist/chunk-CMEZ42F2.cjs +303 -0
  96. package/dist/{chunk-X5P6QQOB.cjs → chunk-CNQKIWIS.cjs} +100 -23
  97. package/dist/{chunk-AQ5PVHOC.cjs → chunk-CSUGNNJY.cjs} +4 -3
  98. package/dist/{chunk-QRQF3556.js → chunk-D6HB3H3L.js} +25 -10
  99. package/dist/{chunk-XZVDYC5U.js → chunk-D7AYKVKW.js} +2 -2
  100. package/dist/{chunk-3UHRCHKB.cjs → chunk-DLCXWOWT.cjs} +23 -23
  101. package/dist/{chunk-CK4HAHVY.cjs → chunk-DMM2BKSV.cjs} +118 -25
  102. package/dist/{chunk-SPQ7QIQ6.js → chunk-DW3DPV77.js} +1 -1
  103. package/dist/chunk-ECQD2QC3.cjs +33 -0
  104. package/dist/{chunk-SNDDZG5H.js → chunk-EEYOS3UC.js} +90 -70
  105. package/dist/{chunk-DGBPWODD.js → chunk-EF2EN5CR.js} +2 -2
  106. package/dist/{chunk-M7B7RRBK.cjs → chunk-EFXFURDY.cjs} +138 -51
  107. package/dist/chunk-EK34UZPB.cjs +40 -0
  108. package/dist/{chunk-CRTCZ4WL.cjs → chunk-FJR6EZLO.cjs} +3834 -2337
  109. package/dist/{chunk-TYBPTKFT.js → chunk-FPO7YNPQ.js} +1 -1
  110. package/dist/{chunk-X3TI5TJJ.js → chunk-FS4I6BNR.js} +1 -1
  111. package/dist/{chunk-WNJXIACY.js → chunk-FSJ2MNOC.js} +3 -3
  112. package/dist/{chunk-44ZWOBTI.js → chunk-GEHZMC4G.js} +12 -9
  113. package/dist/{chunk-Y5BDE24P.cjs → chunk-GO6C2RAR.cjs} +3 -0
  114. package/dist/{chunk-XW3XCK4E.cjs → chunk-GSMR6V36.cjs} +4 -4
  115. package/dist/{chunk-H426KOGY.js → chunk-GSZWATME.js} +1 -1
  116. package/dist/{chunk-S5JNQIGL.cjs → chunk-GYLGCR6F.cjs} +5 -5
  117. package/dist/{chunk-ONVYXTUT.cjs → chunk-H3OOWNYQ.cjs} +3 -3
  118. package/dist/{chunk-V5ELP2XE.js → chunk-H65446XW.js} +110 -15
  119. package/dist/{chunk-LANGD5CO.js → chunk-H7HXRRHK.js} +45 -1
  120. package/dist/{chunk-RBXBH6EB.cjs → chunk-HN2JTDN5.cjs} +17 -17
  121. package/dist/{chunk-SOVR7S3T.cjs → chunk-HNXUZ5OY.cjs} +2 -2
  122. package/dist/{chunk-AZ47LKD5.cjs → chunk-HOYT3E65.cjs} +3 -3
  123. package/dist/{chunk-P4FUTSVK.js → chunk-HTPY5ESD.js} +3 -3
  124. package/dist/{chunk-5SFV2NCY.cjs → chunk-HVLWH2AF.cjs} +10 -10
  125. package/dist/{chunk-VQHSYAPZ.cjs → chunk-HZTEU4W5.cjs} +62 -93
  126. package/dist/{chunk-4XFHP2SN.cjs → chunk-I5T7LPFP.cjs} +7 -7
  127. package/dist/{chunk-ZPLCAXJW.js → chunk-IB5CJXE7.js} +7 -7
  128. package/dist/{chunk-KM7R5YPS.cjs → chunk-INNXFLDR.cjs} +9 -6
  129. package/dist/{chunk-2ESQR35E.cjs → chunk-JFLEP3T7.cjs} +10 -10
  130. package/dist/chunk-JJGDOBFL.js +40 -0
  131. package/dist/{chunk-5A7ZL64N.js → chunk-JSU46T6K.js} +1 -1
  132. package/dist/{chunk-NB6M6ESM.js → chunk-K6WN6BT4.js} +1 -1
  133. package/dist/{chunk-QQ64HEHP.cjs → chunk-KIQH3SMT.cjs} +34 -31
  134. package/dist/{chunk-MANJ67D3.js → chunk-KPRXHIE2.js} +52 -83
  135. package/dist/{chunk-6HF6XSCC.js → chunk-LIO3RX2Z.js} +2 -2
  136. package/dist/{chunk-NZ3ZWLUW.js → chunk-LOSXLH7P.js} +109 -16
  137. package/dist/{chunk-NZ7GCK7Y.cjs → chunk-LSOR72PB.cjs} +23 -23
  138. package/dist/{chunk-6AYJCDTA.js → chunk-MA3AVDCC.js} +47 -9
  139. package/dist/{chunk-PZZMIYII.js → chunk-ME3S2WIR.js} +3 -3
  140. package/dist/{chunk-2IW5YFJ4.js → chunk-NC2I2M4P.js} +4 -4
  141. package/dist/{chunk-AE2ILW25.cjs → chunk-NC4A4LVC.cjs} +13 -13
  142. package/dist/{chunk-EEHWALXA.js → chunk-NGEK5FCJ.js} +85 -3
  143. package/dist/{chunk-MMKZSJUN.js → chunk-NKW6CHXQ.js} +1 -1
  144. package/dist/{chunk-JB3JCYBJ.js → chunk-NOWCRKP2.js} +4 -3
  145. package/dist/{chunk-3ZOOH44N.js → chunk-NUB2LMB6.js} +2 -2
  146. package/dist/chunk-O246MKIW.cjs +267 -0
  147. package/dist/{chunk-SRMGWMQO.js → chunk-OGFWL2PS.js} +1 -1
  148. package/dist/{chunk-YISPVAXO.cjs → chunk-ONNGAR6W.cjs} +340 -597
  149. package/dist/{chunk-7WAUCLLQ.js → chunk-OOFR6A62.js} +33 -4
  150. package/dist/{chunk-4E7SHPNQ.js → chunk-OZ7FHO7J.js} +2 -2
  151. package/dist/{chunk-NV6LCD2I.cjs → chunk-P5EWGUI2.cjs} +109 -27
  152. package/dist/{chunk-YC5OBZQU.js → chunk-P6BQJPAI.js} +41 -18
  153. package/dist/{chunk-SHRLFX6F.js → chunk-PG2JIU5M.js} +57 -6
  154. package/dist/{chunk-6OECOAK5.cjs → chunk-PI27G2ED.cjs} +25 -8
  155. package/dist/{chunk-TR6NECEZ.js → chunk-PI7LRPL6.js} +1 -1
  156. package/dist/{chunk-GAOPJ5S3.cjs → chunk-PMPEC5HN.cjs} +18 -15
  157. package/dist/{chunk-5GCQ5UMV.cjs → chunk-PYUP7AKY.cjs} +14 -14
  158. package/dist/{chunk-S5QKRA2V.js → chunk-QC5Z3ZT5.js} +2 -2
  159. package/dist/chunk-QDO4L2A7.cjs +156 -0
  160. package/dist/{chunk-LFDPTJYF.cjs → chunk-QDXRI5AM.cjs} +1 -1
  161. package/dist/{chunk-26G7YGOW.js → chunk-QVXMSQOG.js} +84 -21
  162. package/dist/{chunk-SVVP4UUZ.cjs → chunk-R4UKBKDY.cjs} +11 -11
  163. package/dist/{chunk-HG3ZASBH.cjs → chunk-R75AWII3.cjs} +112 -17
  164. package/dist/{chunk-TE4SYTWR.cjs → chunk-RD5PLUIX.cjs} +8 -8
  165. package/dist/{chunk-FFHSCM5M.js → chunk-RGB34CV5.js} +3 -3
  166. package/dist/{chunk-SY2P3Z5W.cjs → chunk-RJCZLFHE.cjs} +96 -32
  167. package/dist/{chunk-22SCR3EV.cjs → chunk-RKWNM2BJ.cjs} +2 -2
  168. package/dist/{chunk-FBQJZKFX.js → chunk-RMVONICR.js} +3 -3
  169. package/dist/{chunk-PY73W5MQ.cjs → chunk-RPSYRJL7.cjs} +10 -4
  170. package/dist/{chunk-HXHE2KAO.js → chunk-RWKU2X7O.js} +7 -4
  171. package/dist/{chunk-NQZH5CR2.cjs → chunk-RZLEGVMH.cjs} +102 -5
  172. package/dist/{chunk-KMP6Y3LJ.js → chunk-S2L3Y677.js} +1 -1
  173. package/dist/{chunk-GSDV75A5.js → chunk-S7KVUIOS.js} +1 -1
  174. package/dist/{chunk-7PT646AL.cjs → chunk-SACJJ6NO.cjs} +5 -3
  175. package/dist/{chunk-LEZEWKPA.js → chunk-SJQU2ZFR.js} +96 -32
  176. package/dist/{chunk-65LRPW5W.js → chunk-SKAQKQFF.js} +12 -2
  177. package/dist/chunk-T4DXP5OP.js +30 -0
  178. package/dist/{chunk-EYHKL4QC.js → chunk-T6FTB6K2.js} +1 -1
  179. package/dist/{chunk-DNSD7DVJ.js → chunk-T6N6GRFT.js} +13 -10
  180. package/dist/{chunk-575PXZX7.js → chunk-TJFKA6A7.js} +82 -3
  181. package/dist/{chunk-HSWWM6AM.js → chunk-TJZUPS4Z.js} +34 -291
  182. package/dist/{chunk-DHUQZ53B.cjs → chunk-TLKHZ425.cjs} +2 -2
  183. package/dist/{chunk-VLGGMQUN.cjs → chunk-TQ24NLXO.cjs} +6 -6
  184. package/dist/{chunk-LUMV3DB2.js → chunk-TWBAU46X.js} +1 -1
  185. package/dist/{chunk-EA2MS25U.cjs → chunk-TZB5XADL.cjs} +4 -4
  186. package/dist/{chunk-U6PLSPMD.cjs → chunk-UAYXZXWU.cjs} +4 -4
  187. package/dist/{chunk-OV3T5MUH.cjs → chunk-UKBFNBDO.cjs} +11 -11
  188. package/dist/{chunk-SZD45IDG.js → chunk-UMJYX5KD.js} +101 -4
  189. package/dist/{chunk-B76FJKEJ.cjs → chunk-USKYTHDL.cjs} +69 -18
  190. package/dist/{chunk-NZQFKXM3.cjs → chunk-VAJUSZMC.cjs} +15 -15
  191. package/dist/{chunk-SDLY4X3G.js → chunk-VGQG4NBJ.js} +2 -2
  192. package/dist/{chunk-KWXGDSYT.js → chunk-VLUIVJ3J.js} +58 -7
  193. package/dist/{chunk-KJ26T7GM.cjs → chunk-VOBINVMV.cjs} +105 -42
  194. package/dist/{chunk-C5QIQQ37.js → chunk-VSHKKCSH.js} +16 -5
  195. package/dist/{chunk-L46OUKW5.cjs → chunk-VSZU3MGA.cjs} +28 -17
  196. package/dist/{chunk-YFXTE422.cjs → chunk-VWHAUB77.cjs} +8 -3
  197. package/dist/{chunk-UWZ4G3SQ.js → chunk-VXGYFX45.js} +4 -4
  198. package/dist/{chunk-C46B72VK.js → chunk-WH6YUQDB.js} +141 -54
  199. package/dist/{chunk-SFFEKZGC.js → chunk-WQ6TD55V.js} +2 -2
  200. package/dist/{chunk-7PJKTSRN.js → chunk-WQWECXTY.js} +3 -3
  201. package/dist/{chunk-DSSCERHI.cjs → chunk-WVDJUJH6.cjs} +2 -2
  202. package/dist/{chunk-JPFRI4L4.js → chunk-X24VIVDZ.js} +210 -26
  203. package/dist/{chunk-7IRQ7JEH.js → chunk-X4NRTLXD.js} +7 -1
  204. package/dist/{chunk-7MY4JHER.js → chunk-X53SHYCG.js} +2 -2
  205. package/dist/{chunk-RFUKZIJF.cjs → chunk-XB2Z4ZAK.cjs} +5 -5
  206. package/dist/{chunk-WJYFLQ7G.cjs → chunk-Y47OJGLB.cjs} +3 -3
  207. package/dist/{chunk-HC2Q6A3E.cjs → chunk-Y4MN27V3.cjs} +361 -177
  208. package/dist/{chunk-ZK6HOR62.js → chunk-YEHFYZFU.js} +7 -2
  209. package/dist/{chunk-FFBDRUO5.cjs → chunk-YICIUY23.cjs} +1 -1
  210. package/dist/{chunk-63ANVAOJ.cjs → chunk-YMXYC777.cjs} +3 -3
  211. package/dist/{chunk-X7XMITIL.cjs → chunk-Z3GRWK6O.cjs} +8 -8
  212. package/dist/{chunk-3ICORF7M.cjs → chunk-Z5GG2KSL.cjs} +4 -4
  213. package/dist/{chunk-I2ZK3AOD.js → chunk-ZER7DYQK.js} +2 -2
  214. package/dist/{chunk-V3SZLWEQ.cjs → chunk-ZFDXZEZJ.cjs} +11 -11
  215. package/dist/{chunk-QBYGMMDD.js → chunk-ZFV4HJA6.js} +66 -4
  216. package/dist/chunk-ZHMYTI5D.cjs +529 -0
  217. package/dist/{chunk-4567QNRB.js → chunk-ZLR2TFBC.js} +3 -0
  218. package/dist/{chunk-OCATAKXV.cjs → chunk-ZTWNU5QZ.cjs} +20 -20
  219. package/dist/{chunk-CCIDL4SA.js → chunk-ZVLVLDYN.js} +2915 -1418
  220. package/dist/clear-AJGXD2BB.cjs +12 -0
  221. package/dist/{clear-Y5TO3RZA.js → clear-HAHDSWKW.js} +3 -3
  222. package/dist/communityInstaller-IRR6M3N6.cjs +22 -0
  223. package/dist/{communityInstaller-RVL4STPS.js → communityInstaller-OLKEUGMX.js} +5 -5
  224. package/dist/completion-G7Z436TF.cjs +17 -0
  225. package/dist/{completion-SE3XYG74.js → completion-ZS3AXJ6A.js} +4 -4
  226. package/dist/{config-7KPHKFTP.js → config-OWYAQPCX.js} +5 -4
  227. package/dist/config-W2BHT2QE.cjs +22 -0
  228. package/dist/{constants-EJFAWJQI.js → constants-AS6K67AA.js} +5 -3
  229. package/dist/constants-B4W5BT7F.cjs +23 -0
  230. package/dist/{export-BJVIDZC4.js → export-5HIU3KMD.js} +4 -4
  231. package/dist/export-GFD32UY2.cjs +15 -0
  232. package/dist/{extractSessionMemories-A2JX5WJ2.js → extractSessionMemories-K6ZVAW2F.js} +1 -1
  233. package/dist/{extractSessionMemories-XL3MS37F.cjs → extractSessionMemories-LLOIJR5U.cjs} +2 -2
  234. package/dist/feature-KP74CZ3F.cjs +14 -0
  235. package/dist/{feature-V4JF5TNJ.js → feature-OPNVMB2E.js} +2 -2
  236. package/dist/features-LT55MURX.cjs +24 -0
  237. package/dist/features-ZDIU26WX.js +24 -0
  238. package/dist/feedback-7WTJFQ6S.js +18 -0
  239. package/dist/feedback-CEOJ3453.cjs +18 -0
  240. package/dist/go-2CY5SZNR.js +16 -0
  241. package/dist/go-O2CSQON4.cjs +16 -0
  242. package/dist/goal-DL2N2AWT.cjs +16 -0
  243. package/dist/goal-IJS7VZSG.js +16 -0
  244. package/dist/help-RNOGDEBA.cjs +12 -0
  245. package/dist/{help-MLIROWKM.js → help-TCWD2IRH.js} +2 -2
  246. package/dist/{history-GQJ6RZD6.js → history-ATOR5OQV.js} +2 -2
  247. package/dist/history-UUSGX2AL.cjs +14 -0
  248. package/dist/{hooks-PPFHCF7T.js → hooks-R3Z5QKUP.js} +5 -5
  249. package/dist/hooks-RWM5UY67.cjs +18 -0
  250. package/dist/{i18n-Q7UZJRPL.js → i18n-4QI4TD4I.js} +1 -1
  251. package/dist/i18n-MFAEU5RV.cjs +33 -0
  252. package/dist/{ide-BUSVE54P.js → ide-6PBTCCUQ.js} +4 -4
  253. package/dist/ide-UE3G7NMQ.cjs +15 -0
  254. package/dist/{import-C7S6UJMW.cjs → import-2IG76KAN.cjs} +6 -4
  255. package/dist/{import-U47DXCA7.js → import-E47QL4DW.js} +2 -2
  256. package/dist/import-NQDNBFUL.cjs +10 -0
  257. package/dist/{import-3VBKI6BN.js → import-VQIHGJWS.js} +6 -4
  258. package/dist/index.cjs +444 -334
  259. package/dist/index.d.cts +38 -0
  260. package/dist/index.d.ts +38 -0
  261. package/dist/index.js +324 -214
  262. package/dist/init-DX3RDGDT.cjs +10 -0
  263. package/dist/{init-Q2O4R42R.js → init-Q54OAAFZ.js} +2 -2
  264. package/dist/{inputPrompt-3CFZDUBH.js → inputPrompt-V2VBDRM7.js} +2 -2
  265. package/dist/inputPrompt-WVGVWAHS.cjs +90 -0
  266. package/dist/language-I6KXAOXD.js +23 -0
  267. package/dist/language-XMIVOH5E.cjs +23 -0
  268. package/dist/learn-JPVVGTKU.js +23 -0
  269. package/dist/learn-NLSHI2MZ.cjs +23 -0
  270. package/dist/login-NABQYLYC.cjs +28 -0
  271. package/dist/login-XPOVFSWN.js +28 -0
  272. package/dist/logout-HNHCGB4Q.js +25 -0
  273. package/dist/logout-SKGDXJSW.cjs +25 -0
  274. package/dist/{mcp-AH3MMUBU.js → mcp-EN73YFGZ.js} +8 -7
  275. package/dist/mcp-TADZCPJQ.cjs +22 -0
  276. package/dist/{mcp-install-IA4ZS2SV.cjs → mcp-install-2GKWWBAS.cjs} +14 -13
  277. package/dist/{mcp-install-222PCKSW.js → mcp-install-3TBTVSHW.js} +9 -8
  278. package/dist/memory-GRXFTDIN.cjs +10 -0
  279. package/dist/{memory-VB46T5H3.js → memory-K2P3CDCH.js} +2 -2
  280. package/dist/{model-SJJG64AM.js → model-DEG22OWA.js} +2 -2
  281. package/dist/model-OSD74T7Z.cjs +10 -0
  282. package/dist/new-4NWBOATU.cjs +12 -0
  283. package/dist/{new-ERZ5C6CN.js → new-KJAP2MB6.js} +3 -3
  284. package/dist/{onboarding-ZQXMPSMJ.js → onboarding-2U5WE2OA.js} +17 -14
  285. package/dist/onboarding-5DZFCO5Q.cjs +39 -0
  286. package/dist/permissions-KY5I6YQ3.cjs +10 -0
  287. package/dist/{permissions-7ACNFK7A.js → permissions-TKYON7PP.js} +2 -2
  288. package/dist/{plan-YYUAXPTL.js → plan-DYHHLZSS.js} +1 -1
  289. package/dist/plan-PYKP652W.cjs +13 -0
  290. package/dist/quit-GSKJL42O.js +14 -0
  291. package/dist/quit-TQSRTBUT.cjs +14 -0
  292. package/dist/{registry-4DXUDKJN.js → registry-EZ4V4TUQ.js} +1339 -1
  293. package/dist/{registry-UEO3ETZ7.cjs → registry-LCWYI4IB.cjs} +1378 -40
  294. package/dist/resume-4VWJXARX.cjs +17 -0
  295. package/dist/{resume-XSXZMDMD.js → resume-TLHWWWFN.js} +5 -5
  296. package/dist/{review-QHP2KP4Q.js → review-CSK4IYTO.js} +1 -1
  297. package/dist/review-XLJEUH5K.cjs +9 -0
  298. package/dist/{rpc-XH7QLN4H.js → rpc-3DLQBDWU.js} +151 -124
  299. package/dist/{rpc-YF54T7JU.cjs → rpc-O36WUU3L.cjs} +169 -142
  300. package/dist/search-DSX2CY4A.cjs +22 -0
  301. package/dist/search-I3QUDUQL.js +22 -0
  302. package/dist/sessionBranching-DVNOUWJT.cjs +19 -0
  303. package/dist/sessionBranching-FKV4CR36.js +19 -0
  304. package/dist/sessions-3JUOT3ED.cjs +10 -0
  305. package/dist/{sessions-NJYHJOEL.js → sessions-VWMDIPOS.js} +2 -2
  306. package/dist/{settings-ZXUQH3DO.js → settings-FT2LZZUV.js} +11 -8
  307. package/dist/settings-RL4KNWHB.cjs +45 -0
  308. package/dist/setup-HQEJVOYT.js +32 -0
  309. package/dist/setup-MN54LKOL.cjs +32 -0
  310. package/dist/share-BUAFZNBX.cjs +17 -0
  311. package/dist/{share-WFAGZ5PY.js → share-CGB6MAVJ.js} +6 -6
  312. package/dist/skills/builtin/code-reviewer/SKILL.md +64 -0
  313. package/dist/skills/builtin/goal-writer/SKILL.md +124 -0
  314. package/dist/{skills-NBTNDVAY.js → skills-7DKR3HRZ.js} +7 -7
  315. package/dist/{skills-OB6RDW7D.js → skills-BBBENOEY.js} +9 -9
  316. package/dist/skills-OQM7IHAF.cjs +29 -0
  317. package/dist/{skills-ZROBG3RZ.cjs → skills-RA2PKL63.cjs} +9 -9
  318. package/dist/{skills-install-ILX6QVEF.cjs → skills-install-D7K476SL.cjs} +15 -15
  319. package/dist/{skills-install-BHTIEMKH.js → skills-install-T4SOKJSL.js} +8 -8
  320. package/dist/{skills-new-YMRP2HNO.js → skills-new-S33NGEU3.js} +6 -6
  321. package/dist/skills-new-UVYH53MD.cjs +18 -0
  322. package/dist/slashCommands-MWOUDSQP.js +111 -0
  323. package/dist/slashCommands-XASURUTV.cjs +111 -0
  324. package/dist/squad-PIIYDFVH.cjs +15 -0
  325. package/dist/squad-VHYOVEJP.js +15 -0
  326. package/dist/status-GHFTXQBL.js +25 -0
  327. package/dist/status-WXMIJIU3.cjs +25 -0
  328. package/dist/statusline-2K7AC6ZQ.js +21 -0
  329. package/dist/statusline-GROI4HOC.cjs +21 -0
  330. package/dist/sync-254WF6JI.cjs +42 -0
  331. package/dist/sync-2DIZN4EH.cjs +24 -0
  332. package/dist/{sync-OCJN4ZSO.js → sync-J6I2ZUKQ.js} +5 -3
  333. package/dist/{sync-7C25MOT2.js → sync-Z3LVSEEV.js} +8 -6
  334. package/dist/{teammate-D77B6QRT.cjs → teammate-EXR76PEQ.cjs} +5 -5
  335. package/dist/{teammate-EZCMHOIL.js → teammate-K4DAOFEQ.js} +5 -5
  336. package/dist/theme-MVQDSU47.js +23 -0
  337. package/dist/theme-QAKEYWJG.cjs +23 -0
  338. package/dist/ui/questionModal.cjs +5 -5
  339. package/dist/ui/questionModal.js +4 -4
  340. package/dist/{undo-GNUTFXCW.js → undo-5AU47JHF.js} +2 -2
  341. package/dist/undo-ME6WKUXZ.cjs +10 -0
  342. package/dist/{usage-QSTNSDAO.js → usage-QTKO2YMD.js} +6 -5
  343. package/dist/usage-TYNJKVER.cjs +25 -0
  344. package/package.json +4 -3
  345. package/dist/AgentRegistry-GOV7FN2O.js +0 -10
  346. package/dist/AgentRegistry-J2C6JBZ3.cjs +0 -10
  347. package/dist/CommunitySkillsCache-22BB3J6H.cjs +0 -8
  348. package/dist/LearnAdvisor-KKEQ5QCV.js +0 -9
  349. package/dist/LearnAdvisor-Q7RAYLPF.cjs +0 -9
  350. package/dist/MemoryManager-PMNAEZMB.cjs +0 -8
  351. package/dist/MemoryManager-QZRLTUB5.js +0 -8
  352. package/dist/NVIDIAProvider-C3FWQOBZ.cjs +0 -14
  353. package/dist/PermissionManager-URCNP5EC.cjs +0 -11
  354. package/dist/ProviderFactory-56N3ECE4.cjs +0 -12
  355. package/dist/SessionManager-2IZGWASQ.cjs +0 -10
  356. package/dist/SkillsRegistry-GMRVONOQ.cjs +0 -9
  357. package/dist/SubAgent-4GOR2FIJ.js +0 -13
  358. package/dist/SubAgent-ZJMDH4FI.cjs +0 -13
  359. package/dist/add-dir-BTAD5OZS.cjs +0 -11
  360. package/dist/agent-B3EVT7NN.cjs +0 -126
  361. package/dist/agent-SATQ3WZ3.js +0 -126
  362. package/dist/agents-44CRJGM7.cjs +0 -18
  363. package/dist/agents-NN4ZAJ7R.js +0 -18
  364. package/dist/agents-new-6D6G4QS6.cjs +0 -17
  365. package/dist/autoSkill-VQLGBELN.cjs +0 -20
  366. package/dist/automode-45DWV4TN.cjs +0 -10
  367. package/dist/chrome-Q2U73HZB.cjs +0 -50
  368. package/dist/chrome-Q54OALOK.cjs +0 -21
  369. package/dist/chrome-ZNJ46OYW.js +0 -21
  370. package/dist/chunk-JCUHCH37.cjs +0 -247
  371. package/dist/chunk-VKOXFT4L.cjs +0 -23
  372. package/dist/clear-QJXU25IF.cjs +0 -12
  373. package/dist/communityInstaller-LXMVKVAV.cjs +0 -22
  374. package/dist/completion-JX4T2ONW.cjs +0 -17
  375. package/dist/config-3224PRW4.cjs +0 -21
  376. package/dist/constants-MCCGUU5F.cjs +0 -21
  377. package/dist/export-KU4557HK.cjs +0 -15
  378. package/dist/feature-K3LG5IJP.cjs +0 -14
  379. package/dist/features-5OJTLKS7.js +0 -23
  380. package/dist/features-VCBJQXCX.cjs +0 -23
  381. package/dist/feedback-D4437VE4.js +0 -18
  382. package/dist/feedback-VZPEHGFY.cjs +0 -18
  383. package/dist/go-X4E6BCD6.js +0 -12
  384. package/dist/go-XREVFS5I.cjs +0 -12
  385. package/dist/goal-4M3J6JS2.cjs +0 -16
  386. package/dist/goal-EI66BV7W.js +0 -16
  387. package/dist/help-GGFS7WHY.cjs +0 -12
  388. package/dist/history-J4LUIOSI.cjs +0 -14
  389. package/dist/hooks-FSRIUS6A.cjs +0 -18
  390. package/dist/i18n-CI6VFXL5.cjs +0 -33
  391. package/dist/ide-YR27BPGM.cjs +0 -15
  392. package/dist/import-DBK4OCDF.cjs +0 -10
  393. package/dist/init-OXTYS72D.cjs +0 -10
  394. package/dist/inputPrompt-JMACL4EB.cjs +0 -90
  395. package/dist/language-EK3M6UBV.cjs +0 -22
  396. package/dist/language-Q3RUGGOW.js +0 -22
  397. package/dist/learn-3DSX7DYG.cjs +0 -23
  398. package/dist/learn-OPOH5L43.js +0 -23
  399. package/dist/login-GST7MWXJ.cjs +0 -27
  400. package/dist/login-Q7DZKAX4.js +0 -27
  401. package/dist/logout-2G7OUK7I.cjs +0 -24
  402. package/dist/logout-FNBBL2UI.js +0 -24
  403. package/dist/mcp-DW7R63IB.cjs +0 -21
  404. package/dist/memory-6NX3DAIY.cjs +0 -10
  405. package/dist/model-64NAELFS.cjs +0 -10
  406. package/dist/new-DU5SOOOY.cjs +0 -12
  407. package/dist/onboarding-2U2BV2KE.cjs +0 -36
  408. package/dist/permissions-GSNNV7RJ.cjs +0 -10
  409. package/dist/plan-XEJMOT55.cjs +0 -13
  410. package/dist/quit-WY6T267G.js +0 -10
  411. package/dist/quit-XIRE2KRE.cjs +0 -10
  412. package/dist/resume-RQZ3WXBP.cjs +0 -17
  413. package/dist/review-UWHWQHCB.cjs +0 -9
  414. package/dist/search-VXXFGZWU.cjs +0 -21
  415. package/dist/search-YAWGX7P7.js +0 -21
  416. package/dist/sessions-OSG3UJEZ.cjs +0 -10
  417. package/dist/settings-SO2UIGWV.cjs +0 -42
  418. package/dist/setup-KG7EGKF5.js +0 -30
  419. package/dist/setup-RSOPCQ57.cjs +0 -30
  420. package/dist/share-ZU3SGACF.cjs +0 -17
  421. package/dist/skills-KBVAQAD2.cjs +0 -29
  422. package/dist/skills-new-B45VQ2PP.cjs +0 -18
  423. package/dist/slashCommands-53VYIBJU.js +0 -105
  424. package/dist/slashCommands-BG2RGGZ6.cjs +0 -105
  425. package/dist/status-CQ2IUOVK.cjs +0 -24
  426. package/dist/status-E7IGNVPC.js +0 -24
  427. package/dist/sync-XRP46IVG.cjs +0 -40
  428. package/dist/sync-ZMFVE7T4.cjs +0 -22
  429. package/dist/theme-KKRDE6P7.cjs +0 -22
  430. package/dist/theme-XF7XIWBQ.js +0 -22
  431. package/dist/undo-U4KN7QQM.cjs +0 -10
  432. package/dist/usage-YDEMQBNQ.cjs +0 -24
@@ -0,0 +1,529 @@
1
+ // src/commands/squad.ts
2
+ import chalk from "chalk";
3
+ import { createHash, createPublicKey, verify as cryptoVerify } from "crypto";
4
+ import { spawn } from "child_process";
5
+ import { constants as fsConstants, existsSync } from "fs";
6
+ import { access, chmod, mkdir, readFile, writeFile } from "fs/promises";
7
+ import { arch as osArch, homedir, platform as osPlatform } from "os";
8
+ import path from "path";
9
+ var DEFAULT_API_BASE_URL = "https://api.autohand.ai";
10
+ var DEFAULT_CHANNEL = "stable";
11
+ var SQUAD_FEATURE_FLAG = "squad_daemon";
12
+ var REQUIRED_BINARIES = ["squad", "autohand-squad-daemon", "autohand-squad-analytics", "autohand-squad-tray", "autohand-squad-ui"];
13
+ var START_ACTIONS = /* @__PURE__ */ new Set(["start", "open", "restart"]);
14
+ var metadata = {
15
+ command: "/squad",
16
+ description: "open and manage the local Autohand Squad runtime",
17
+ implemented: true
18
+ };
19
+ async function squad(ctx, args = [], deps = {}) {
20
+ const result = await runSquadCommand(ctx, args, deps);
21
+ return result.output;
22
+ }
23
+ async function runSquadCommand(ctx, args = [], deps = {}) {
24
+ const parsed = parseSquadCommand(args);
25
+ const env = deps.env ?? process.env;
26
+ const paths = squadPaths(env, deps.homeDir);
27
+ let runtimeEntitlement;
28
+ if (START_ACTIONS.has(parsed.action)) {
29
+ const entitlement = await evaluateSquadEntitlement(ctx.config, deps);
30
+ if (!entitlement.ok) {
31
+ return {
32
+ code: 1,
33
+ output: entitlement.message ?? chalk.red("Autohand Squad is not available for this account.")
34
+ };
35
+ }
36
+ runtimeEntitlement = entitlement;
37
+ const install = await ensureSquadRuntime(paths, entitlement, deps);
38
+ if (install.code !== 0) {
39
+ return install;
40
+ }
41
+ await writeRuntimeConfig(paths, ctx.config, entitlement, env);
42
+ } else if (!hasLocalRuntime(paths)) {
43
+ return {
44
+ code: 1,
45
+ output: [
46
+ chalk.yellow("Autohand Squad runtime is not installed."),
47
+ chalk.gray("Run `autohand squad` to install and start it after entitlement is verified.")
48
+ ].join("\n")
49
+ };
50
+ }
51
+ const binary = resolveSquadBinary(paths, env);
52
+ if (!binary) {
53
+ return {
54
+ code: 1,
55
+ output: chalk.red(`Squad launcher was not found under ${paths.binDir}.`)
56
+ };
57
+ }
58
+ const runtimeArgs = buildRuntimeArgs(parsed, ctx.workspaceRoot, ctx.config, env, runtimeEntitlement);
59
+ const runtimeEnv = buildRuntimeEnv(ctx.config, env, runtimeEntitlement);
60
+ return runRuntime(binary, runtimeArgs, deps, runtimeEnv);
61
+ }
62
+ function parseSquadCommand(args) {
63
+ const first = args[0]?.toLowerCase();
64
+ if (isSquadAction(first)) {
65
+ return { action: first, passthroughArgs: args.slice(1) };
66
+ }
67
+ const openBrowser = !args.includes("--no-open");
68
+ return {
69
+ action: openBrowser ? "open" : "start",
70
+ passthroughArgs: args
71
+ };
72
+ }
73
+ function isSquadAction(value) {
74
+ return value === "start" || value === "status" || value === "restart" || value === "stop" || value === "queue" || value === "open" || value === "config";
75
+ }
76
+ function buildRuntimeArgs(parsed, workspaceRoot, config, env, entitlement) {
77
+ const passthroughArgs = parsed.passthroughArgs.filter((arg) => arg !== "--no-open");
78
+ const args = [parsed.action, ...passthroughArgs];
79
+ if ((parsed.action === "open" || parsed.action === "start") && !hasOption(passthroughArgs, "--open-url")) {
80
+ args.push("--open-url", buildOpenUrl(workspaceRoot, passthroughArgs));
81
+ }
82
+ pushOption(args, passthroughArgs, "--api-base-url", apiBaseUrlFromConfig(config, env));
83
+ pushOption(args, passthroughArgs, "--update-channel", entitlement?.updateChannel || env.AUTOHAND_SQUAD_UPDATE_CHANNEL || DEFAULT_CHANNEL);
84
+ pushOptionalOption(args, passthroughArgs, "--account-email", entitlement?.accountEmail || config?.auth?.user?.email || env.AUTOHAND_SQUAD_ACCOUNT_EMAIL);
85
+ pushOptionalOption(args, passthroughArgs, "--plan-state", entitlement?.planState || env.AUTOHAND_SQUAD_PLAN_STATE);
86
+ pushOption(args, passthroughArgs, "--telemetry-policy", entitlement?.telemetryPolicy || telemetryPolicyFromConfig(config, env));
87
+ return args;
88
+ }
89
+ function buildOpenUrl(workspaceRoot, args) {
90
+ const { host, port } = readHostPortArgs(args);
91
+ const url = new URL(`http://${host}:${port}/conversations/new`);
92
+ url.searchParams.set("workspace", workspaceRoot);
93
+ return url.toString();
94
+ }
95
+ function readHostPortArgs(args) {
96
+ let host = "127.0.0.1";
97
+ let port = "19821";
98
+ for (let index = 0; index < args.length; index += 1) {
99
+ const arg = args[index];
100
+ if (arg === "--host" && args[index + 1]) {
101
+ host = args[index + 1];
102
+ index += 1;
103
+ continue;
104
+ }
105
+ if (arg.startsWith("--host=")) {
106
+ host = arg.slice("--host=".length);
107
+ continue;
108
+ }
109
+ if (arg === "--port" && args[index + 1]) {
110
+ port = args[index + 1];
111
+ index += 1;
112
+ continue;
113
+ }
114
+ if (arg.startsWith("--port=")) {
115
+ port = arg.slice("--port=".length);
116
+ }
117
+ }
118
+ return { host, port };
119
+ }
120
+ function hasOption(args, name) {
121
+ return args.some((arg) => arg === name || arg.startsWith(`${name}=`));
122
+ }
123
+ function pushOption(args, passthroughArgs, name, value) {
124
+ if (!hasOption(passthroughArgs, name)) {
125
+ args.push(name, value);
126
+ }
127
+ }
128
+ function pushOptionalOption(args, passthroughArgs, name, value) {
129
+ if (value && !hasOption(passthroughArgs, name)) {
130
+ args.push(name, value);
131
+ }
132
+ }
133
+ async function evaluateSquadEntitlement(config, deps) {
134
+ const token = config?.auth?.token;
135
+ if (!token) {
136
+ return {
137
+ ok: false,
138
+ updateChannel: DEFAULT_CHANNEL,
139
+ message: [
140
+ chalk.yellow("Sign in to Autohand before starting Squad."),
141
+ chalk.gray("Run `autohand login`, then try `autohand squad` again.")
142
+ ].join("\n")
143
+ };
144
+ }
145
+ const env = deps.env ?? process.env;
146
+ const apiBaseUrl = apiBaseUrlFromConfig(config, env);
147
+ const updateChannel = env.AUTOHAND_SQUAD_UPDATE_CHANNEL || DEFAULT_CHANNEL;
148
+ const fetchImpl = deps.fetchImpl ?? fetch;
149
+ try {
150
+ const response = await fetchImpl(`${apiBaseUrl}/v1/squad/entitlement`, {
151
+ headers: {
152
+ Authorization: `Bearer ${token}`,
153
+ Accept: "application/json"
154
+ }
155
+ });
156
+ const payload = await response.json();
157
+ if (!response.ok || payload.success === false) {
158
+ return {
159
+ ok: false,
160
+ updateChannel,
161
+ message: entitlementMessage(payload, "Unable to verify Squad entitlement.")
162
+ };
163
+ }
164
+ const hasPlan = Boolean(
165
+ payload.activePlan ?? payload.planActive ?? payload.hasSquadPlan ?? payload.plan === "squad"
166
+ );
167
+ if (!hasPlan) {
168
+ return {
169
+ ok: false,
170
+ updateChannel,
171
+ message: [
172
+ chalk.yellow("Autohand Squad is not active on this account."),
173
+ chalk.gray("Upgrade to an active Squad plan before installing the local daemon.")
174
+ ].join("\n")
175
+ };
176
+ }
177
+ const flagEnabled = Boolean(
178
+ payload.featureEnabled ?? payload.squadDaemonEnabled ?? readNestedFlag(payload, SQUAD_FEATURE_FLAG)
179
+ );
180
+ if (!flagEnabled) {
181
+ return {
182
+ ok: false,
183
+ updateChannel,
184
+ message: [
185
+ chalk.yellow("Autohand Squad daemon is not enabled for this account yet."),
186
+ chalk.gray(`Feature flag required: ${SQUAD_FEATURE_FLAG}`)
187
+ ].join("\n")
188
+ };
189
+ }
190
+ return {
191
+ ok: true,
192
+ updateChannel: stringField(payload.updateChannel) || updateChannel,
193
+ latestAllowedVersion: stringField(payload.latestAllowedVersion) || stringField(payload.latest_allowed_version),
194
+ manifestUrl: stringField(payload.releaseManifestUrl) || stringField(payload.manifestUrl),
195
+ accountEmail: stringField(payload.accountEmail) || stringField(payload.email) || config.auth?.user?.email,
196
+ planState: stringField(payload.planState) || stringField(payload.plan) || stringField(payload.plan_state),
197
+ telemetryPolicy: stringField(payload.telemetryPolicy) || stringField(payload.telemetry_policy)
198
+ };
199
+ } catch (error) {
200
+ return {
201
+ ok: false,
202
+ updateChannel,
203
+ message: [
204
+ chalk.red("Unable to verify Squad entitlement."),
205
+ chalk.gray(error.message)
206
+ ].join("\n")
207
+ };
208
+ }
209
+ }
210
+ async function ensureSquadRuntime(paths, entitlement, deps) {
211
+ if (hasLocalRuntime(paths) && await isLatestAllowed(paths, entitlement.latestAllowedVersion)) {
212
+ return { code: 0, output: "" };
213
+ }
214
+ const manifest = await fetchReleaseManifest(entitlement, deps);
215
+ if (!manifest.ok) return manifest;
216
+ const version = manifestVersion(manifest.value, entitlement);
217
+ const artifacts = selectRequiredArtifacts(manifest.value);
218
+ if (!artifacts.ok) return artifacts;
219
+ const installed = [];
220
+ await mkdir(paths.binDir, { recursive: true });
221
+ for (const artifact of artifacts.value) {
222
+ const binaryName = artifactBinaryName(artifact);
223
+ const artifactResult = await downloadArtifact(artifact, deps);
224
+ if (!artifactResult.ok) return artifactResult;
225
+ const targetPath = path.join(paths.binDir, binaryFileName(binaryName));
226
+ await writeFile(targetPath, artifactResult.bytes);
227
+ await chmod(targetPath, 493);
228
+ installed.push({
229
+ binaryName,
230
+ url: artifact.url ?? "",
231
+ sha256: artifact.sha256 ?? ""
232
+ });
233
+ }
234
+ await writeInstallRecord(paths.installJson, {
235
+ version,
236
+ channel: manifest.value.channel || entitlement.updateChannel,
237
+ installedAt: (deps.now?.() ?? /* @__PURE__ */ new Date()).toISOString(),
238
+ artifacts: installed
239
+ });
240
+ return { code: 0, output: "" };
241
+ }
242
+ async function writeRuntimeConfig(paths, config, entitlement, env) {
243
+ const runtimeConfig = {
244
+ apiBaseUrl: apiBaseUrlFromConfig(config, env),
245
+ updateChannel: entitlement.updateChannel,
246
+ accountEmail: entitlement.accountEmail || config?.auth?.user?.email || env.AUTOHAND_SQUAD_ACCOUNT_EMAIL,
247
+ planState: entitlement.planState || env.AUTOHAND_SQUAD_PLAN_STATE,
248
+ telemetryPolicy: entitlement.telemetryPolicy || telemetryPolicyFromConfig(config, env),
249
+ openUrl: env.AUTOHAND_SQUAD_OPEN_URL,
250
+ hostedUiUrl: env.AUTOHAND_SQUAD_HOSTED_UI_URL,
251
+ proxyUrl: env.AUTOHAND_SQUAD_PROXY_URL,
252
+ apiGatewayUrl: env.AUTOHAND_SQUAD_API_GATEWAY_URL,
253
+ fixedPort: numberFromEnv(env.AUTOHAND_SQUAD_FIXED_PORT)
254
+ };
255
+ await mkdir(path.dirname(paths.configJson), { recursive: true });
256
+ await writeFile(paths.configJson, `${JSON.stringify(stripUndefined(runtimeConfig), null, 2)}
257
+ `, { mode: 384 });
258
+ }
259
+ async function fetchReleaseManifest(entitlement, deps) {
260
+ const env = deps.env ?? process.env;
261
+ const apiBaseUrl = env.AUTOHAND_SQUAD_API_BASE_URL || env.AUTOHAND_API_URL || DEFAULT_API_BASE_URL;
262
+ const manifestUrl = entitlement.manifestUrl || `${apiBaseUrl.replace(/\/+$/, "")}/v1/squad/releases/${entitlement.updateChannel}/manifest`;
263
+ try {
264
+ const response = await (deps.fetchImpl ?? fetch)(manifestUrl, {
265
+ headers: { Accept: "application/json" }
266
+ });
267
+ const payload = await response.json();
268
+ if (!response.ok) {
269
+ return {
270
+ ok: false,
271
+ code: 1,
272
+ output: chalk.red(`Failed to fetch Squad release manifest: HTTP ${response.status}`)
273
+ };
274
+ }
275
+ return { ok: true, value: payload };
276
+ } catch (error) {
277
+ return {
278
+ ok: false,
279
+ code: 1,
280
+ output: [
281
+ chalk.red("Failed to fetch Squad release manifest."),
282
+ chalk.gray(error.message)
283
+ ].join("\n")
284
+ };
285
+ }
286
+ }
287
+ function selectRequiredArtifacts(manifest) {
288
+ const artifacts = manifest.artifacts ?? [];
289
+ const selected = REQUIRED_BINARIES.map((binaryName) => {
290
+ return artifacts.find((artifact) => {
291
+ return targetOsMatches(artifact.os) && targetArchMatches(artifact.arch) && artifactBinaryName(artifact) === binaryName;
292
+ });
293
+ });
294
+ if (selected.some((artifact) => !artifact)) {
295
+ return {
296
+ ok: false,
297
+ code: 1,
298
+ output: [
299
+ chalk.red("Squad release manifest does not contain binaries for this OS/arch."),
300
+ chalk.gray(`Need: ${REQUIRED_BINARIES.join(", ")} for ${targetOs()}/${targetArch()}`)
301
+ ].join("\n")
302
+ };
303
+ }
304
+ return { ok: true, value: selected };
305
+ }
306
+ async function downloadArtifact(artifact, deps) {
307
+ if (!artifact.url || !artifact.sha256) {
308
+ return { ok: false, code: 1, output: chalk.red("Invalid Squad artifact manifest entry.") };
309
+ }
310
+ try {
311
+ const response = await (deps.fetchImpl ?? fetch)(artifact.url);
312
+ if (!response.ok) {
313
+ return { ok: false, code: 1, output: chalk.red(`Failed to download Squad artifact: HTTP ${response.status}`) };
314
+ }
315
+ const bytes = Buffer.from(await response.arrayBuffer());
316
+ const actual = createHash("sha256").update(bytes).digest("hex");
317
+ if (actual.toLowerCase() !== artifact.sha256.toLowerCase()) {
318
+ return {
319
+ ok: false,
320
+ code: 1,
321
+ output: chalk.red(`Checksum mismatch for ${artifactBinaryName(artifact)}.`)
322
+ };
323
+ }
324
+ const signatureError = verifyArtifactSignature(artifact);
325
+ if (signatureError) {
326
+ return { ok: false, code: 1, output: chalk.red(signatureError) };
327
+ }
328
+ return { ok: true, bytes };
329
+ } catch (error) {
330
+ return {
331
+ ok: false,
332
+ code: 1,
333
+ output: [
334
+ chalk.red(`Failed to download ${artifactBinaryName(artifact)}.`),
335
+ chalk.gray(error.message)
336
+ ].join("\n")
337
+ };
338
+ }
339
+ }
340
+ function verifyArtifactSignature(artifact) {
341
+ const signature = artifact.signature;
342
+ if (!signature) return null;
343
+ const publicKey = artifact.publicKey ?? artifact.public_key;
344
+ if (!publicKey) {
345
+ return `Artifact ${artifactBinaryName(artifact)} is signed but no public key was provided.`;
346
+ }
347
+ try {
348
+ const rawPublicKey = Buffer.from(publicKey, "base64");
349
+ const spkiPrefix = Buffer.from("302a300506032b6570032100", "hex");
350
+ const key = createPublicKey({
351
+ key: Buffer.concat([spkiPrefix, rawPublicKey]),
352
+ format: "der",
353
+ type: "spki"
354
+ });
355
+ const ok = cryptoVerify(
356
+ null,
357
+ Buffer.from(artifact.sha256 ?? ""),
358
+ key,
359
+ Buffer.from(signature, "base64")
360
+ );
361
+ return ok ? null : `Signature verification failed for ${artifactBinaryName(artifact)}.`;
362
+ } catch (error) {
363
+ return `Signature verification failed for ${artifactBinaryName(artifact)}: ${error.message}`;
364
+ }
365
+ }
366
+ function runRuntime(binary, args, deps, runtimeEnv) {
367
+ const spawnProcess = deps.spawnProcess ?? spawn;
368
+ return new Promise((resolve) => {
369
+ const child = spawnProcess(binary, args, {
370
+ env: { ...process.env, ...deps.env ?? {}, ...runtimeEnv },
371
+ stdio: ["ignore", "pipe", "pipe"]
372
+ });
373
+ let stdout = "";
374
+ let stderr = "";
375
+ child.stdout?.on("data", (chunk) => {
376
+ stdout += String(chunk);
377
+ });
378
+ child.stderr?.on("data", (chunk) => {
379
+ stderr += String(chunk);
380
+ });
381
+ child.on("error", (error) => {
382
+ resolve({ code: 1, output: chalk.red(error.message) });
383
+ });
384
+ child.on("close", (code) => {
385
+ resolve({
386
+ code: code ?? 0,
387
+ output: [stdout.trimEnd(), stderr.trimEnd()].filter(Boolean).join("\n")
388
+ });
389
+ });
390
+ });
391
+ }
392
+ function hasLocalRuntime(paths) {
393
+ return REQUIRED_BINARIES.every((binaryName) => existsSync(path.join(paths.binDir, binaryFileName(binaryName))));
394
+ }
395
+ async function isLatestAllowed(paths, latestAllowedVersion) {
396
+ if (!latestAllowedVersion) return true;
397
+ try {
398
+ const record = JSON.parse(await readFile(paths.installJson, "utf8"));
399
+ return record.version === latestAllowedVersion;
400
+ } catch {
401
+ return false;
402
+ }
403
+ }
404
+ function resolveSquadBinary(paths, env) {
405
+ const explicit = env.AUTOHAND_SQUAD_BIN;
406
+ if (explicit && existsSync(explicit)) return explicit;
407
+ const installed = path.join(paths.binDir, binaryFileName("squad"));
408
+ if (existsSync(installed)) return installed;
409
+ return findOnPath(binaryFileName("squad"), env.PATH);
410
+ }
411
+ function findOnPath(binaryName, pathValue) {
412
+ for (const entry of (pathValue ?? "").split(path.delimiter)) {
413
+ if (!entry) continue;
414
+ const candidate = path.join(entry, binaryName);
415
+ if (existsSync(candidate)) return candidate;
416
+ }
417
+ return null;
418
+ }
419
+ function squadPaths(env, homeDir = homedir()) {
420
+ const root = env.AUTOHAND_SQUAD_HOME || path.join(env.AUTOHAND_HOME || path.join(homeDir, ".autohand"), "squad");
421
+ return {
422
+ root,
423
+ binDir: path.join(root, "bin"),
424
+ configJson: path.join(root, "config.json"),
425
+ installJson: path.join(root, "install.json")
426
+ };
427
+ }
428
+ async function writeInstallRecord(filePath, record) {
429
+ await mkdir(path.dirname(filePath), { recursive: true });
430
+ await writeFile(filePath, `${JSON.stringify(record, null, 2)}
431
+ `);
432
+ }
433
+ function manifestVersion(manifest, entitlement) {
434
+ return manifest.latestAllowedVersion || manifest.latest_allowed_version || manifest.version || entitlement.latestAllowedVersion || "0.0.0";
435
+ }
436
+ function artifactBinaryName(artifact) {
437
+ const value = artifact.binaryName || artifact.binary_name || "autohand-squad-daemon";
438
+ return isRequiredBinary(value) ? value : "autohand-squad-daemon";
439
+ }
440
+ function isRequiredBinary(value) {
441
+ return REQUIRED_BINARIES.includes(value);
442
+ }
443
+ function binaryFileName(binaryName) {
444
+ return process.platform === "win32" ? `${binaryName}.exe` : binaryName;
445
+ }
446
+ function targetOs() {
447
+ return osPlatform();
448
+ }
449
+ function targetArch() {
450
+ return osArch();
451
+ }
452
+ function targetOsMatches(value) {
453
+ return value === targetOs();
454
+ }
455
+ function targetArchMatches(value) {
456
+ const arch = targetArch();
457
+ return value === arch || arch === "x64" && value === "x86_64" || arch === "arm64" && value === "aarch64";
458
+ }
459
+ function apiBaseUrlFromConfig(config, env) {
460
+ const configApi = config ? config.api?.baseUrl : void 0;
461
+ return (env.AUTOHAND_SQUAD_API_BASE_URL || env.AUTOHAND_API_URL || configApi || config?.telemetry?.apiBaseUrl || DEFAULT_API_BASE_URL).replace(/\/+$/, "");
462
+ }
463
+ function buildRuntimeEnv(config, env, entitlement) {
464
+ return stripUndefined({
465
+ AUTOHAND_SQUAD_API_BASE_URL: apiBaseUrlFromConfig(config, env),
466
+ AUTOHAND_SQUAD_UPDATE_CHANNEL: entitlement?.updateChannel || env.AUTOHAND_SQUAD_UPDATE_CHANNEL || DEFAULT_CHANNEL,
467
+ AUTOHAND_SQUAD_ACCOUNT_EMAIL: entitlement?.accountEmail || config?.auth?.user?.email || env.AUTOHAND_SQUAD_ACCOUNT_EMAIL,
468
+ AUTOHAND_SQUAD_PLAN_STATE: entitlement?.planState || env.AUTOHAND_SQUAD_PLAN_STATE,
469
+ AUTOHAND_SQUAD_TELEMETRY_POLICY: entitlement?.telemetryPolicy || telemetryPolicyFromConfig(config, env),
470
+ AUTOHAND_SQUAD_API_AUTH_TOKEN: config?.auth?.token || env.AUTOHAND_SQUAD_API_AUTH_TOKEN || env.AUTOHAND_SQUAD_AUTH_TOKEN || env.AUTOHAND_TOKEN,
471
+ AUTOHAND_SQUAD_COMPANY_SECRET: env.AUTOHAND_SQUAD_COMPANY_SECRET || config?.api?.companySecret || config?.telemetry?.companySecret || env.AUTOHAND_SECRET
472
+ });
473
+ }
474
+ function telemetryPolicyFromConfig(config, env) {
475
+ if (env.AUTOHAND_SQUAD_TELEMETRY_POLICY) return env.AUTOHAND_SQUAD_TELEMETRY_POLICY;
476
+ return config?.telemetry?.enabled === false ? "disabled" : "local-buffered";
477
+ }
478
+ function numberFromEnv(value) {
479
+ if (!value) return void 0;
480
+ const parsed = Number(value);
481
+ return Number.isInteger(parsed) && parsed > 0 && parsed <= 65535 ? parsed : void 0;
482
+ }
483
+ function stripUndefined(input) {
484
+ return Object.fromEntries(Object.entries(input).filter(([, value]) => value !== void 0));
485
+ }
486
+ function entitlementMessage(payload, fallback) {
487
+ const message = stringField(payload.message) || stringField(payload.error) || fallback;
488
+ return [chalk.red(message), chalk.gray("Squad was not installed.")].join("\n");
489
+ }
490
+ function readNestedFlag(payload, flag) {
491
+ const featureFlags = payload.featureFlags;
492
+ if (featureFlags && typeof featureFlags === "object" && !Array.isArray(featureFlags)) {
493
+ return featureFlags[flag];
494
+ }
495
+ const flags = payload.flags;
496
+ if (flags && typeof flags === "object" && !Array.isArray(flags)) {
497
+ return flags[flag];
498
+ }
499
+ if (Array.isArray(flags)) {
500
+ return flags.some((entry) => {
501
+ return Boolean(entry) && typeof entry === "object" && entry.key === flag && entry.enabled === true;
502
+ });
503
+ }
504
+ return void 0;
505
+ }
506
+ function stringField(value) {
507
+ return typeof value === "string" && value.trim() ? value : void 0;
508
+ }
509
+ async function pathIsExecutable(filePath) {
510
+ try {
511
+ await access(filePath, fsConstants.X_OK);
512
+ return true;
513
+ } catch {
514
+ return false;
515
+ }
516
+ }
517
+
518
+ export {
519
+ metadata,
520
+ squad,
521
+ runSquadCommand,
522
+ parseSquadCommand,
523
+ pathIsExecutable
524
+ };
525
+ /**
526
+ * @license
527
+ * Copyright 2025 Autohand AI LLC
528
+ * SPDX-License-Identifier: Apache-2.0
529
+ */
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  showModal
3
- } from "./chunk-NZ3ZWLUW.js";
3
+ } from "./chunk-LOSXLH7P.js";
4
4
 
5
5
  // src/commands/completion.ts
6
6
  import chalk2 from "chalk";
@@ -14,6 +14,7 @@ var DEFAULT_CONFIG = {
14
14
  commands: ["autohand"],
15
15
  slashCommands: [
16
16
  "/quit",
17
+ "/exit",
17
18
  "/model",
18
19
  "/session",
19
20
  "/sessions",
@@ -50,6 +51,7 @@ var DEFAULT_CONFIG = {
50
51
  { flag: "--temperature", description: "Sampling temperature" },
51
52
  { flag: "--unrestricted", description: "Skip all approval prompts" },
52
53
  { flag: "--restricted", description: "Block all dangerous operations" },
54
+ { flag: "--no-idle-logout", description: "Keep authenticated idle sessions alive" },
53
55
  { flag: "--help", description: "Show help" },
54
56
  { flag: "--version", description: "Show version" }
55
57
  ]
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  getAuthClient
3
- } from "./chunk-6AYJCDTA.js";
3
+ } from "./chunk-MA3AVDCC.js";
4
4
  import {
5
5
  showModal
6
- } from "./chunk-NZ3ZWLUW.js";
6
+ } from "./chunk-LOSXLH7P.js";
7
7
  import {
8
8
  saveConfig
9
- } from "./chunk-IEPLQ47J.js";
9
+ } from "./chunk-CM24K6ZT.js";
10
10
  import {
11
11
  t
12
- } from "./chunk-LEZEWKPA.js";
12
+ } from "./chunk-SJQU2ZFR.js";
13
13
 
14
14
  // src/commands/logout.ts
15
15
  import chalk from "chalk";