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,183 @@
1
+ // src/goals/templates.ts
2
+ import { execFileSync } from "child_process";
3
+ import fs from "fs-extra";
4
+ import path from "path";
5
+ var TEMPLATE_DIR = ".pi-goals";
6
+ var DEFAULT_COMMAND_TIMEOUT_MS = 1e4;
7
+ var DEFAULT_COMMAND_OUTPUT_LIMIT = 2e4;
8
+ async function listGoalTemplateMetadata(root) {
9
+ const templates = await discoverGoalTemplates(root);
10
+ return templates.map((template) => {
11
+ const requiredPlaceholders = findRequiredPlaceholders(template.body);
12
+ return {
13
+ name: template.name,
14
+ path: template.path,
15
+ description: template.description,
16
+ aliases: template.aliases,
17
+ allowCommands: template.allowCommands,
18
+ requiredPlaceholders,
19
+ requiredFlags: requiredPlaceholders.filter((placeholder) => placeholder !== "args"),
20
+ requiresArgs: requiredPlaceholders.includes("args")
21
+ };
22
+ });
23
+ }
24
+ async function resolveGoalTemplateInvocation(input, root) {
25
+ const parsed = parseInvocation(input);
26
+ if (!parsed) return { ok: false, notTemplate: true };
27
+ return resolveGoalTemplateByName(root, parsed.name, parsed.flags, parsed.args);
28
+ }
29
+ async function resolveGoalTemplateByName(root, nameOrAlias, flags = {}, args = "") {
30
+ const templates = await discoverGoalTemplates(root);
31
+ const matches = templates.filter((template2) => template2.name === nameOrAlias || template2.aliases.includes(nameOrAlias));
32
+ if (matches.length === 0) return { ok: false, notTemplate: true };
33
+ if (matches.length > 1) {
34
+ return { ok: false, error: `Ambiguous goal template '${nameOrAlias}' matches: ${matches.map((template2) => template2.name).join(", ")}.` };
35
+ }
36
+ const template = matches[0];
37
+ try {
38
+ const objective = resolveInlineCommands(interpolate(template.body, { ...flags, args }), template, root).trim();
39
+ return { ok: true, template: { name: template.name, path: template.path, objective, flags: { ...flags }, args } };
40
+ } catch (error) {
41
+ return { ok: false, error: error instanceof Error ? error.message : String(error) };
42
+ }
43
+ }
44
+ async function discoverGoalTemplates(root) {
45
+ const templates = [];
46
+ for (const dir of templateDirs(root)) {
47
+ if (!await fs.pathExists(dir)) continue;
48
+ await collectTemplates(root, dir, templates);
49
+ }
50
+ templates.sort((a, b) => a.name.localeCompare(b.name));
51
+ return templates;
52
+ }
53
+ function templateDirs(root) {
54
+ return [path.join(root, TEMPLATE_DIR), path.join(root, ".ai", TEMPLATE_DIR)];
55
+ }
56
+ async function collectTemplates(root, templateDir, templates) {
57
+ const entries = await fs.readdir(templateDir).catch(() => []);
58
+ for (const entry of entries) {
59
+ const fullPath = path.join(templateDir, entry);
60
+ const stats = await fs.stat(fullPath).catch(() => null);
61
+ if (!stats) continue;
62
+ if (stats.isDirectory()) {
63
+ await collectTemplates(root, fullPath, templates);
64
+ continue;
65
+ }
66
+ if (![".md", ".markdown", ".txt"].includes(path.extname(entry).toLowerCase())) continue;
67
+ const raw = await fs.readFile(fullPath, "utf8");
68
+ const parsed = parseFrontmatter(raw);
69
+ const name = stripMarkdownExt(path.relative(templateDir, fullPath).split(path.sep).join("/"));
70
+ templates.push({
71
+ name,
72
+ path: path.relative(root, fullPath),
73
+ description: parsed.frontmatter.description || firstContentLine(parsed.body),
74
+ aliases: parseList(parsed.frontmatter.aliases),
75
+ allowCommands: parseBoolean(parsed.frontmatter.allow_commands),
76
+ commandTimeoutMs: parsePositiveInt(parsed.frontmatter.command_timeout_ms, DEFAULT_COMMAND_TIMEOUT_MS),
77
+ commandOutputLimit: parsePositiveInt(parsed.frontmatter.command_output_limit, DEFAULT_COMMAND_OUTPUT_LIMIT),
78
+ body: parsed.body
79
+ });
80
+ }
81
+ }
82
+ function parseFrontmatter(raw) {
83
+ if (!raw.startsWith("---\n")) return { frontmatter: {}, body: raw };
84
+ const end = raw.indexOf("\n---", 4);
85
+ if (end < 0) return { frontmatter: {}, body: raw };
86
+ const frontmatter = {};
87
+ for (const line of raw.slice(4, end).split(/\r?\n/)) {
88
+ const match = line.match(/^([A-Za-z0-9_-]+):\s*(.*)$/);
89
+ if (match) frontmatter[match[1]] = stripQuotes(match[2].trim());
90
+ }
91
+ return { frontmatter, body: raw.slice(end + 4).replace(/^\r?\n/, "") };
92
+ }
93
+ function parseInvocation(input) {
94
+ const trimmed = input.trim();
95
+ if (!trimmed) return null;
96
+ const match = trimmed.match(/^(\S+)(?:\s+([\s\S]*))?$/);
97
+ if (!match) return null;
98
+ let rest = match[2] ?? "";
99
+ let args = "";
100
+ if (rest.startsWith("-- ")) {
101
+ args = rest.slice(3).trim();
102
+ rest = "";
103
+ } else {
104
+ const delimiter = rest.indexOf(" -- ");
105
+ if (delimiter >= 0) {
106
+ args = rest.slice(delimiter + 4).trim();
107
+ rest = rest.slice(0, delimiter).trim();
108
+ }
109
+ }
110
+ return { name: match[1], flags: parseFlags(rest), args };
111
+ }
112
+ function parseFlags(input) {
113
+ const values = {};
114
+ const tokens = input.match(/"[^"]*"|'[^']*'|\S+/g) ?? [];
115
+ for (let i = 0; i < tokens.length; i++) {
116
+ const token = unquote(tokens[i]);
117
+ if (!token.startsWith("--")) continue;
118
+ const eq = token.indexOf("=");
119
+ if (eq > 2) {
120
+ values[token.slice(2, eq)] = token.slice(eq + 1);
121
+ continue;
122
+ }
123
+ const next = tokens[i + 1] && !tokens[i + 1].startsWith("--") ? unquote(tokens[++i]) : "true";
124
+ values[token.slice(2)] = next;
125
+ }
126
+ return values;
127
+ }
128
+ function interpolate(text, values) {
129
+ return text.replace(/\{\{\s*([A-Za-z0-9_-]+)\s*\}\}/g, (_match, key) => {
130
+ if (values[key] === void 0) throw new Error(`Missing template value for {{${key}}}.`);
131
+ return values[key];
132
+ });
133
+ }
134
+ function resolveInlineCommands(text, template, cwd) {
135
+ return text.replace(/!`([^`]+)`/g, (_match, command) => {
136
+ if (!template.allowCommands) throw new Error(`Template ${template.name} uses inline commands but allow_commands is not true.`);
137
+ const output = execFileSync("/bin/bash", ["-lc", command], {
138
+ cwd,
139
+ encoding: "utf8",
140
+ timeout: template.commandTimeoutMs,
141
+ maxBuffer: template.commandOutputLimit + 1024
142
+ });
143
+ return output.length > template.commandOutputLimit ? `${output.slice(0, template.commandOutputLimit)}
144
+ [output truncated]` : output;
145
+ });
146
+ }
147
+ function findRequiredPlaceholders(text) {
148
+ return Array.from(text.matchAll(/\{\{\s*([A-Za-z0-9_-]+)\s*\}\}/g), (match) => match[1]).filter((placeholder, index, all) => all.indexOf(placeholder) === index).sort();
149
+ }
150
+ function parseList(value) {
151
+ if (!value) return [];
152
+ return value.replace(/^\[|\]$/g, "").split(",").map((item) => stripQuotes(item.trim())).filter(Boolean);
153
+ }
154
+ function parseBoolean(value) {
155
+ return value === "true" || value === "yes" || value === "1";
156
+ }
157
+ function parsePositiveInt(value, fallback) {
158
+ const parsed = Number(value);
159
+ return Number.isInteger(parsed) && parsed > 0 ? parsed : fallback;
160
+ }
161
+ function stripMarkdownExt(filePath) {
162
+ return filePath.replace(/\.(md|markdown|txt)$/i, "");
163
+ }
164
+ function firstContentLine(body) {
165
+ return body.split(/\r?\n/).map((line) => line.replace(/^#+\s*/, "").trim()).find(Boolean);
166
+ }
167
+ function stripQuotes(value) {
168
+ return value.replace(/^['"]|['"]$/g, "");
169
+ }
170
+ function unquote(value) {
171
+ return stripQuotes(value);
172
+ }
173
+
174
+ export {
175
+ listGoalTemplateMetadata,
176
+ resolveGoalTemplateInvocation,
177
+ resolveGoalTemplateByName
178
+ };
179
+ /**
180
+ * @license
181
+ * Copyright 2025 Autohand AI LLC
182
+ * SPDX-License-Identifier: Apache-2.0
183
+ */
@@ -1,9 +1,9 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;
2
2
 
3
3
  var _chunkJHGIWNHLcjs = require('./chunk-JHGIWNHL.cjs');
4
4
 
5
5
 
6
- var _chunkSEKD5FH3cjs = require('./chunk-SEKD5FH3.cjs');
6
+ var _chunkKASXKDF2cjs = require('./chunk-KASXKDF2.cjs');
7
7
 
8
8
  // src/skills/SkillsRegistry.ts
9
9
  var _fsextra = require('fs-extra'); var _fsextra2 = _interopRequireDefault(_fsextra);
@@ -95,16 +95,18 @@ var SkillParser = class {
95
95
  // src/skills/SkillsRegistry.ts
96
96
  var SIMILARITY_THRESHOLD = 0.3;
97
97
  var VENDOR_SOURCES = ["codex-user", "claude-user", "codex-project", "claude-project"];
98
- var SkillsRegistry = class {
99
- constructor(userSkillsDir, defaultSource = "autohand-user") {
98
+ var SkillsRegistry = (_class = class {
99
+ constructor(userSkillsDir, defaultSource = "autohand-user") {;_class.prototype.__init.call(this);_class.prototype.__init2.call(this);_class.prototype.__init3.call(this);_class.prototype.__init4.call(this);_class.prototype.__init5.call(this);
100
100
  this.userSkillsDir = userSkillsDir;
101
- this.skills = /* @__PURE__ */ new Map();
102
- this.parser = new SkillParser();
103
- this.workspaceRoot = null;
104
- this.telemetryManager = null;
105
- this.communityClient = null;
106
101
  this.defaultSource = defaultSource;
107
102
  }
103
+
104
+ __init() {this.skills = /* @__PURE__ */ new Map()}
105
+ __init2() {this.parser = new SkillParser()}
106
+ __init3() {this.workspaceRoot = null}
107
+
108
+ __init4() {this.telemetryManager = null}
109
+ __init5() {this.communityClient = null}
108
110
  /**
109
111
  * Set the telemetry manager for tracking skill events
110
112
  */
@@ -232,7 +234,7 @@ var SkillsRegistry = class {
232
234
  this.workspaceRoot = workspaceRoot;
233
235
  const claudeProjectSkillsDir = _path2.default.join(workspaceRoot, ".claude", "skills");
234
236
  await this.loadFromDirectory(claudeProjectSkillsDir, "claude-project", false);
235
- const autohandProjectSkillsDir = _path2.default.join(workspaceRoot, _chunkSEKD5FH3cjs.PROJECT_DIR_NAME, "skills");
237
+ const autohandProjectSkillsDir = _path2.default.join(workspaceRoot, _chunkKASXKDF2cjs.PROJECT_DIR_NAME, "skills");
236
238
  await this.loadFromDirectory(autohandProjectSkillsDir, "autohand-project", true);
237
239
  }
238
240
  /**
@@ -291,7 +293,7 @@ var SkillsRegistry = class {
291
293
  async setWorkspaceWithAutoCopy(workspaceRoot) {
292
294
  this.workspaceRoot = workspaceRoot;
293
295
  const claudeProjectSkillsDir = _path2.default.join(workspaceRoot, ".claude", "skills");
294
- const autohandProjectSkillsDir = _path2.default.join(workspaceRoot, _chunkSEKD5FH3cjs.PROJECT_DIR_NAME, "skills");
296
+ const autohandProjectSkillsDir = _path2.default.join(workspaceRoot, _chunkKASXKDF2cjs.PROJECT_DIR_NAME, "skills");
295
297
  await this.addLocationWithAutoCopy(
296
298
  claudeProjectSkillsDir,
297
299
  "claude-project",
@@ -521,7 +523,7 @@ var SkillsRegistry = class {
521
523
  return false;
522
524
  }
523
525
  }
524
- };
526
+ }, _class);
525
527
 
526
528
 
527
529
 
@@ -0,0 +1,385 @@
1
+ import {
2
+ formatAccount
3
+ } from "./chunk-ZUYYHKQA.js";
4
+ import {
5
+ createCommandTheme
6
+ } from "./chunk-46MTALKD.js";
7
+ import {
8
+ getProviderConfig
9
+ } from "./chunk-IEPLQ47J.js";
10
+ import {
11
+ getFeatureState
12
+ } from "./chunk-LANGD5CO.js";
13
+
14
+ // src/commands/usage.ts
15
+ import fs from "fs";
16
+ import os from "os";
17
+ import path from "path";
18
+
19
+ // src/core/context/types.ts
20
+ var CONTEXT_ENV_VARS = {
21
+ /** Enable/disable context compaction ('true' | 'false'). */
22
+ CONTEXT_COMPACT: "AUTOHAND_CONTEXT_COMPACT",
23
+ /** Override context window size (number). */
24
+ CONTEXT_WINDOW: "AUTOHAND_CONTEXT_WINDOW",
25
+ /** Tokens to reserve for model output (number). */
26
+ RESERVE_TOKENS: "AUTOHAND_RESERVE_TOKENS"
27
+ };
28
+
29
+ // src/core/context/tokenizer.ts
30
+ var MODEL_CONTEXT = {
31
+ "anthropic/claude-4-sonnet": 2e5,
32
+ "anthropic/claude-3-opus": 2e5,
33
+ "anthropic/claude-3-haiku": 2e5,
34
+ "anthropic/claude-opus-4": 2e5,
35
+ "anthropic/claude-opus-4-7": 1e6,
36
+ "openai/gpt-4o-mini": 128e3,
37
+ "openai/gpt-4o": 128e3,
38
+ "openai/gpt-4.1": 2e5,
39
+ "openai/o1": 2e5,
40
+ "openai/o1-mini": 128e3,
41
+ "tencent/hy3-preview:free": 262144,
42
+ "tencent/hy3-preview-20260421:free": 262144,
43
+ "deepseek/deepseek-r1": 64e3,
44
+ "deepseek/deepseek-r1-0528-qwen3-8b:free": 8e3,
45
+ "deepseek/deepseek-coder": 16e3
46
+ };
47
+ var SAFETY_MARGIN = 0.9;
48
+ var CONTEXT_WARNING_THRESHOLD = 0.8;
49
+ var CONTEXT_CRITICAL_THRESHOLD = 0.9;
50
+ function parseContextWindowOverride(value) {
51
+ if (typeof value !== "number" || !Number.isFinite(value) || value <= 0) {
52
+ return void 0;
53
+ }
54
+ return Math.floor(value);
55
+ }
56
+ function normalizeModelId(model) {
57
+ return model.trim().toLowerCase().replace(/^openai\//, "").replace(/^google\//, "").replace(/^deepseek\//, "");
58
+ }
59
+ function inferContextWindow(model) {
60
+ const normalized = normalizeModelId(model);
61
+ if (normalized.startsWith("gpt-5.5")) return 105e4;
62
+ if (normalized.startsWith("gpt-5.4") && !normalized.includes("mini") && !normalized.includes("nano")) return 105e4;
63
+ if (normalized.startsWith("gpt-5.4-mini") || normalized.startsWith("gpt-5.4-nano") || normalized.startsWith("gpt-5.3-codex") || normalized === "gpt-5" || normalized.startsWith("gpt-5-mini") || normalized.startsWith("gpt-5-nano")) {
64
+ return 4e5;
65
+ }
66
+ if (normalized.startsWith("gpt-5.3-chat")) return 128e3;
67
+ if (normalized.startsWith("gemini-3.1-flash-image")) return 128e3;
68
+ if (normalized.startsWith("gemini-3-pro-image")) return 65e3;
69
+ if (normalized.startsWith("gemini-3.1-pro") || normalized.startsWith("gemini-3.1-flash-lite") || normalized.startsWith("gemini-3-flash")) {
70
+ return 1e6;
71
+ }
72
+ if (normalized.startsWith("deepseek-v4")) return 1e6;
73
+ return void 0;
74
+ }
75
+ function getContextWindow(model, configuredContextWindow) {
76
+ const envOverride = process.env[CONTEXT_ENV_VARS.CONTEXT_WINDOW];
77
+ if (envOverride) {
78
+ const parsed = parseInt(envOverride, 10);
79
+ if (!isNaN(parsed) && parsed > 0) return parsed;
80
+ }
81
+ const configured = parseContextWindowOverride(configuredContextWindow);
82
+ if (configured) return configured;
83
+ const normalized = model.toLowerCase();
84
+ if (MODEL_CONTEXT[normalized]) {
85
+ return MODEL_CONTEXT[normalized];
86
+ }
87
+ const inferred = inferContextWindow(model);
88
+ if (inferred) return inferred;
89
+ const fuzzy = Object.entries(MODEL_CONTEXT).find(
90
+ ([name]) => normalized.includes(name) || name.includes(normalized.split("/").pop() ?? "")
91
+ );
92
+ return fuzzy ? fuzzy[1] : 128e3;
93
+ }
94
+ function getModelFamily(model) {
95
+ const normalized = model.toLowerCase();
96
+ if (normalized.includes("claude")) return "claude";
97
+ if (normalized.includes("gpt-4") || normalized.includes("gpt-5") || normalized.includes("o1") || normalized.includes("o3")) return "openai";
98
+ if (normalized.includes("gemini")) return "gemini";
99
+ if (normalized.includes("deepseek")) return "deepseek";
100
+ return "default";
101
+ }
102
+ function estimateTokens(text, modelFamily) {
103
+ if (!text) return 0;
104
+ const codeLikeChars = text.match(/[{}[\]":\\]/g)?.length ?? 0;
105
+ const codeLikeRatio = text.length > 200 && codeLikeChars >= 4 ? 0.65 : 1;
106
+ const baseRatio = {
107
+ openai: 4,
108
+ claude: 3.5,
109
+ gemini: 4,
110
+ deepseek: 3,
111
+ default: 3.5
112
+ };
113
+ const ratio = (baseRatio[modelFamily ?? "default"] ?? 3.5) * codeLikeRatio;
114
+ return Math.ceil(text.length / ratio);
115
+ }
116
+ function estimateMessageTokens(message, modelFamily) {
117
+ const structureOverhead = 10;
118
+ let tokens = structureOverhead;
119
+ tokens += estimateTokens(message.content ?? "", modelFamily);
120
+ if (message.tool_calls) {
121
+ for (const call of message.tool_calls) {
122
+ tokens += 5;
123
+ tokens += estimateTokens(call.function.name, modelFamily);
124
+ tokens += estimateTokens(call.function.arguments, modelFamily);
125
+ }
126
+ }
127
+ return tokens;
128
+ }
129
+ function estimateMessagesTokens(messages, modelFamily) {
130
+ return messages.reduce(
131
+ (acc, message) => acc + estimateMessageTokens(message, modelFamily),
132
+ 0
133
+ );
134
+ }
135
+ function estimateToolsTokens(tools, modelFamily) {
136
+ if (!tools || tools.length === 0) return 0;
137
+ let tokens = 0;
138
+ for (const tool of tools) {
139
+ tokens += estimateTokens(tool.name, modelFamily);
140
+ tokens += estimateTokens(tool.description, modelFamily);
141
+ if (tool.parameters) {
142
+ const paramJson = JSON.stringify(tool.parameters);
143
+ tokens += estimateTokens(paramJson, modelFamily);
144
+ }
145
+ tokens += 35;
146
+ }
147
+ return tokens;
148
+ }
149
+ function calculateContextUsage(messages, tools, model, outputBudget = 16e3, configuredContextWindow) {
150
+ const envReserve = process.env[CONTEXT_ENV_VARS.RESERVE_TOKENS];
151
+ if (envReserve) {
152
+ const parsed = parseInt(envReserve, 10);
153
+ if (!isNaN(parsed) && parsed > 0) outputBudget = parsed;
154
+ }
155
+ const modelFamily = getModelFamily(model);
156
+ const messagesTokens = estimateMessagesTokens(messages, modelFamily);
157
+ const toolsTokens = estimateToolsTokens(tools, modelFamily);
158
+ const totalTokens = messagesTokens + toolsTokens;
159
+ const contextWindow = getContextWindow(model, configuredContextWindow);
160
+ const cappedOutputBudget = Math.min(outputBudget, Math.floor(contextWindow * 0.25));
161
+ const effectiveWindow = contextWindow - cappedOutputBudget;
162
+ const safeWindow = Math.floor(effectiveWindow * SAFETY_MARGIN);
163
+ const usagePercent = totalTokens / effectiveWindow;
164
+ return {
165
+ totalTokens,
166
+ messagesTokens,
167
+ toolsTokens,
168
+ contextWindow,
169
+ safeWindow,
170
+ usagePercent,
171
+ isWarning: usagePercent >= CONTEXT_WARNING_THRESHOLD,
172
+ isCritical: usagePercent >= CONTEXT_CRITICAL_THRESHOLD,
173
+ isExceeded: totalTokens >= safeWindow,
174
+ remainingTokens: Math.max(0, safeWindow - totalTokens)
175
+ };
176
+ }
177
+
178
+ // src/commands/usage.ts
179
+ var USAGE_V2_FLAG = "usage_v2";
180
+ var metadata = {
181
+ command: "/usage",
182
+ description: "Show model, provider, context, and usage limits",
183
+ implemented: true
184
+ };
185
+ function clampPercent(value) {
186
+ if (!Number.isFinite(value)) return 100;
187
+ return Math.max(0, Math.min(100, Math.round(value)));
188
+ }
189
+ function formatPath(value) {
190
+ const home = os.homedir();
191
+ if (value === home) {
192
+ return "~";
193
+ }
194
+ if (value.startsWith(`${home}${path.sep}`)) {
195
+ return `~${value.slice(home.length)}`;
196
+ }
197
+ return value;
198
+ }
199
+ function formatCompactNumber(value) {
200
+ if (!Number.isFinite(value) || value < 0) {
201
+ return "0";
202
+ }
203
+ if (value >= 1e6) {
204
+ const millions = value / 1e6;
205
+ return `${Number.isInteger(millions) ? millions.toFixed(0) : millions.toFixed(1)}M`;
206
+ }
207
+ if (value >= 1e3) {
208
+ const thousands = value / 1e3;
209
+ return `${Number.isInteger(thousands) ? thousands.toFixed(0) : thousands.toFixed(1)}K`;
210
+ }
211
+ return String(Math.round(value));
212
+ }
213
+ function formatPermissionMode(mode) {
214
+ switch (mode ?? "interactive") {
215
+ case "interactive":
216
+ return "Workspace (on-request)";
217
+ case "unrestricted":
218
+ return "Workspace (full access)";
219
+ case "restricted":
220
+ return "Read-only (restricted)";
221
+ case "external":
222
+ return "External approval";
223
+ }
224
+ }
225
+ function resolveProviderSettings(config, provider) {
226
+ if (!config || !provider) {
227
+ return void 0;
228
+ }
229
+ return getProviderConfig(config, provider) ?? void 0;
230
+ }
231
+ function resolveActiveProvider(ctx) {
232
+ return ctx.config?.provider ?? ctx.provider ?? "openrouter";
233
+ }
234
+ function resolveActiveModel(ctx, provider) {
235
+ const settings = resolveProviderSettings(ctx.config, provider);
236
+ return settings?.model ?? ctx.model;
237
+ }
238
+ function resolveReasoningEffort(config, provider) {
239
+ return resolveProviderSettings(config, provider)?.reasoningEffort;
240
+ }
241
+ function resolveContextWindow(ctx, provider, model) {
242
+ const settings = resolveProviderSettings(ctx.config, provider);
243
+ return ctx.getContextWindow?.() ?? settings?.contextWindow ?? getContextWindow(model, settings?.contextWindow);
244
+ }
245
+ function resolveContextTokensUsed(ctx, contextWindow, percentLeft) {
246
+ const reported = ctx.getTotalTokensUsed?.();
247
+ if (typeof reported === "number" && Number.isFinite(reported) && reported > 0) {
248
+ return Math.round(reported);
249
+ }
250
+ return Math.round(contextWindow * ((100 - percentLeft) / 100));
251
+ }
252
+ function resolveAgentsFile(workspaceRoot) {
253
+ return fs.existsSync(path.join(workspaceRoot, "AGENTS.md")) ? "AGENTS.md" : "none";
254
+ }
255
+ function resolveAccount(config) {
256
+ const account = formatAccount(config, "");
257
+ if (account) {
258
+ return account;
259
+ }
260
+ if (config?.openai?.authMode === "chatgpt" && config.openai.chatgptAuth?.accountId) {
261
+ return `ChatGPT account ${config.openai.chatgptAuth.accountId}`;
262
+ }
263
+ return "not signed in";
264
+ }
265
+ function isUsageV2Enabled(ctx) {
266
+ const localDefault = ctx.config ? getFeatureState(ctx.config, USAGE_V2_FLAG)?.enabled ?? false : false;
267
+ return ctx.isFeatureEnabled?.(USAGE_V2_FLAG, localDefault) ?? localDefault;
268
+ }
269
+ function gatherUsageDashboardData(ctx) {
270
+ const provider = resolveActiveProvider(ctx);
271
+ const model = resolveActiveModel(ctx, provider);
272
+ const contextPercentLeft = clampPercent(ctx.getContextPercentLeft?.() ?? 100);
273
+ const contextWindow = resolveContextWindow(ctx, provider, model);
274
+ const currentSession = ctx.sessionManager.getCurrentSession();
275
+ const usageLimits = ctx.getUsageLimits?.() ?? [];
276
+ return {
277
+ model,
278
+ provider,
279
+ directory: formatPath(ctx.workspaceRoot),
280
+ permissions: formatPermissionMode(ctx.config?.permissions?.mode),
281
+ agentsFile: resolveAgentsFile(ctx.workspaceRoot),
282
+ account: resolveAccount(ctx.config),
283
+ sessionId: currentSession?.metadata.sessionId ?? "none",
284
+ contextPercentLeft,
285
+ contextWindow,
286
+ contextTokensUsed: resolveContextTokensUsed(ctx, contextWindow, contextPercentLeft),
287
+ tokenUsageStatus: ctx.getTokenUsageStatus?.() ?? "actual",
288
+ reasoningEffort: resolveReasoningEffort(ctx.config, provider),
289
+ usageLimits
290
+ };
291
+ }
292
+ function formatProgressBar(percentLeft, width = 24) {
293
+ const emptySlots = Math.round(percentLeft / 100 * width);
294
+ const usedSlots = width - emptySlots;
295
+ return `[${"\u2588".repeat(emptySlots)}${"\u2591".repeat(usedSlots)}]`;
296
+ }
297
+ function formatInfoRow(label, value, labelWidth) {
298
+ const theme = createCommandTheme();
299
+ return `${theme.muted(label.padEnd(labelWidth))} ${value}`;
300
+ }
301
+ function formatModel(data) {
302
+ if (!data.reasoningEffort) {
303
+ return data.model;
304
+ }
305
+ return `${data.model} ${createCommandTheme().muted(`(reasoning ${data.reasoningEffort})`)}`;
306
+ }
307
+ function formatContextSummary(data) {
308
+ const used = formatCompactNumber(data.contextTokensUsed);
309
+ const window = formatCompactNumber(data.contextWindow);
310
+ const suffix = data.tokenUsageStatus === "unavailable" ? " estimated" : "";
311
+ return `${data.contextPercentLeft}% left ${createCommandTheme().muted(`(${used} used / ${window}${suffix})`)}`;
312
+ }
313
+ function formatUsageLimitRow(row, labelWidth) {
314
+ if (row.unavailableReason) {
315
+ return formatInfoRow(`${row.label}:`, row.unavailableReason, labelWidth);
316
+ }
317
+ const percent = clampPercent(row.percentLeft ?? 100);
318
+ const reset = row.resetLabel ? createCommandTheme().muted(` (${row.resetLabel})`) : "";
319
+ const usage2 = typeof row.used === "number" && typeof row.limit === "number" ? createCommandTheme().muted(` (${formatCompactNumber(row.used)} used / ${formatCompactNumber(row.limit)})`) : "";
320
+ return formatInfoRow(`${row.label}:`, `${formatProgressBar(percent)} ${percent}% left${reset}${usage2}`, labelWidth);
321
+ }
322
+ function formatUsageDashboard(data) {
323
+ const labelWidth = 24;
324
+ const providerLimitRows = data.usageLimits.length > 0 ? data.usageLimits : [{ label: String(data.provider), unavailableReason: "not reported by provider" }];
325
+ const lines = [
326
+ formatInfoRow("Model:", formatModel(data), labelWidth),
327
+ formatInfoRow("Provider:", String(data.provider), labelWidth),
328
+ formatInfoRow("Directory:", data.directory, labelWidth),
329
+ formatInfoRow("Permissions:", data.permissions, labelWidth),
330
+ formatInfoRow("Agents.md:", data.agentsFile, labelWidth),
331
+ formatInfoRow("Account:", data.account, labelWidth),
332
+ formatInfoRow("Session:", data.sessionId, labelWidth),
333
+ "",
334
+ formatInfoRow("Context window:", formatContextSummary(data), labelWidth),
335
+ formatInfoRow("", formatProgressBar(data.contextPercentLeft), labelWidth),
336
+ "",
337
+ formatInfoRow("Provider limits:", "", labelWidth).trimEnd(),
338
+ ...providerLimitRows.map((row) => formatUsageLimitRow(row, labelWidth))
339
+ ];
340
+ return lines.join("\n");
341
+ }
342
+ async function usage(ctx) {
343
+ if (!isUsageV2Enabled(ctx)) {
344
+ return "The /usage dashboard is behind usage_v2. Run /features enable usage_v2, then /usage again. No restart required.";
345
+ }
346
+ await ctx.trackFeatureActivation?.(USAGE_V2_FLAG, {
347
+ provider: ctx.provider,
348
+ model: ctx.model
349
+ });
350
+ return formatUsageDashboard(gatherUsageDashboardData(ctx));
351
+ }
352
+
353
+ export {
354
+ CONTEXT_ENV_VARS,
355
+ getContextWindow,
356
+ estimateMessageTokens,
357
+ estimateMessagesTokens,
358
+ calculateContextUsage,
359
+ USAGE_V2_FLAG,
360
+ metadata,
361
+ gatherUsageDashboardData,
362
+ formatUsageDashboard,
363
+ usage
364
+ };
365
+ /**
366
+ * @license
367
+ * Copyright 2025 Autohand AI LLC
368
+ * SPDX-License-Identifier: Apache-2.0
369
+ *
370
+ * Domain types for the context-compaction module.
371
+ */
372
+ /**
373
+ * @license
374
+ * Copyright 2025 Autohand AI LLC
375
+ * SPDX-License-Identifier: Apache-2.0
376
+ *
377
+ * Token estimation, context window lookup, and usage calculation.
378
+ * Moved from src/utils/context.ts — this is the canonical location.
379
+ * The old barrel re-exports for backward compatibility.
380
+ */
381
+ /**
382
+ * @license
383
+ * Copyright 2026 Autohand AI LLC
384
+ * SPDX-License-Identifier: Apache-2.0
385
+ */
@@ -1,17 +1,20 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/utils/gitIgnore.ts
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;// src/utils/gitIgnore.ts
2
2
  var _fsextra = require('fs-extra'); var _fsextra2 = _interopRequireDefault(_fsextra);
3
3
  var _path = require('path'); var _path2 = _interopRequireDefault(_path);
4
4
  var _ignore = require('ignore'); var _ignore2 = _interopRequireDefault(_ignore);
5
- var GitIgnoreParser = class {
6
- constructor(projectRoot, extraPatterns) {
5
+ var GitIgnoreParser = (_class = class {
6
+ constructor(projectRoot, extraPatterns) {;_class.prototype.__init.call(this);_class.prototype.__init2.call(this);
7
7
  this.extraPatterns = extraPatterns;
8
- this.cache = /* @__PURE__ */ new Map();
9
- this.processedExtraPatterns = [];
10
8
  this.projectRoot = _path2.default.resolve(projectRoot);
11
9
  if (_optionalChain([this, 'access', _ => _.extraPatterns, 'optionalAccess', _2 => _2.length])) {
12
10
  this.processedExtraPatterns = this.processPatterns(this.extraPatterns, ".");
13
11
  }
14
12
  }
13
+
14
+
15
+ __init() {this.cache = /* @__PURE__ */ new Map()}
16
+
17
+ __init2() {this.processedExtraPatterns = []}
15
18
  isIgnored(filePath) {
16
19
  if (!filePath) {
17
20
  return false;
@@ -111,7 +114,7 @@ var GitIgnoreParser = class {
111
114
  }
112
115
  return newPattern;
113
116
  }
114
- };
117
+ }, _class);
115
118
 
116
119
 
117
120