autohand-cli 0.8.2 → 0.8.3

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 (257) hide show
  1. package/dist/{AgentRegistry-NQCLWABO.cjs → AgentRegistry-HRPN6ZOF.cjs} +1 -1
  2. package/dist/{AgentRegistry-7LDL5HJH.js → AgentRegistry-ODDXPAFR.js} +1 -1
  3. package/dist/{AutomodeManager-NYIZNODK.cjs → AutomodeManager-6ATBE7Q5.cjs} +1 -1
  4. package/dist/{AutomodeManager-MWLKGPZK.js → AutomodeManager-EOVHGRPP.js} +1 -1
  5. package/dist/{CommunitySkillsCache-GTQMOCCO.cjs → CommunitySkillsCache-KE435RAR.cjs} +1 -1
  6. package/dist/{CommunitySkillsCache-6QPRMTJO.js → CommunitySkillsCache-QLE57BN5.js} +1 -1
  7. package/dist/{GitHubRegistryFetcher-S7QFUEKV.cjs → GitHubRegistryFetcher-I45SESIL.cjs} +1 -1
  8. package/dist/{GitHubRegistryFetcher-6JQ5JEDZ.js → GitHubRegistryFetcher-NT5GFZXS.js} +1 -1
  9. package/dist/HookManager-B2F35M27.js +7 -0
  10. package/dist/HookManager-PFAFE3FK.cjs +7 -0
  11. package/dist/{ImportWizard-35YBJ4AM.cjs → ImportWizard-CJRZPPHL.cjs} +4 -4
  12. package/dist/{ImportWizard-XH7CINCH.js → ImportWizard-OHRKBANZ.js} +2 -2
  13. package/dist/LearnAdvisor-FLBA6FDD.js +9 -0
  14. package/dist/LearnAdvisor-GG3CXQF3.cjs +9 -0
  15. package/dist/{McpClientManager-RKD7C6OY.cjs → McpClientManager-NQ3EW2IF.cjs} +1 -1
  16. package/dist/{McpClientManager-7RM6YT35.js → McpClientManager-VBIMGKXU.js} +1 -1
  17. package/dist/{MemoryManager-GUNLRP5S.js → MemoryManager-2LAT7IHS.js} +1 -1
  18. package/dist/{MemoryManager-TNSGKDKX.cjs → MemoryManager-2LQPIYVE.cjs} +1 -1
  19. package/dist/{PermissionManager-ATUV34LQ.js → PermissionManager-7NQHRCHY.js} +2 -2
  20. package/dist/PermissionManager-X57BXHJ6.cjs +11 -0
  21. package/dist/{ProjectProfiler-UMJJSOCE.js → ProjectProfiler-P4QJQWWA.js} +1 -1
  22. package/dist/{ProjectProfiler-ZDWR2ODG.cjs → ProjectProfiler-UG42W6WD.cjs} +1 -1
  23. package/dist/{ProviderFactory-MR5B23QJ.js → ProviderFactory-2IYJ5OPW.js} +2 -2
  24. package/dist/ProviderFactory-KPJOGQWF.cjs +9 -0
  25. package/dist/{SessionManager-IKWAK2PI.js → SessionManager-4U4JFQ3C.js} +1 -1
  26. package/dist/{SessionManager-FEUAU3ZJ.cjs → SessionManager-YBJAZXNO.cjs} +1 -1
  27. package/dist/{SkillsRegistry-KPQFTRIT.cjs → SkillsRegistry-7O72A6TZ.cjs} +1 -1
  28. package/dist/{SkillsRegistry-XJSKPDF2.js → SkillsRegistry-RFEINXRT.js} +1 -1
  29. package/dist/{SubAgent-NYH6GWQ3.js → SubAgent-JT4HZHN7.js} +2 -2
  30. package/dist/{SubAgent-PZKBDUBA.cjs → SubAgent-VPNYDWAU.cjs} +3 -3
  31. package/dist/{SyncApiClient-LVIO4C2S.js → SyncApiClient-B5RT2ECG.js} +1 -1
  32. package/dist/{SyncApiClient-ZNYMT36M.cjs → SyncApiClient-HQXJL5BT.cjs} +1 -1
  33. package/dist/about-4DB5KTHW.js +12 -0
  34. package/dist/about-LXAOXZFT.cjs +12 -0
  35. package/dist/{actionExecutor-XT5FW3W6.js → actionExecutor-23JB2WUC.js} +5 -5
  36. package/dist/{actionExecutor-U6IBN2TU.cjs → actionExecutor-X5UEZSKH.cjs} +6 -6
  37. package/dist/{add-dir-247K3XRY.js → add-dir-TUJM3PG5.js} +1 -1
  38. package/dist/{add-dir-GS4DXKKH.cjs → add-dir-YC37DMSF.cjs} +1 -1
  39. package/dist/{agents-WJPQWQF2.js → agents-YF3BSUU5.js} +1 -1
  40. package/dist/{agents-R6ZEFTVR.cjs → agents-ZOUHPMYR.cjs} +1 -1
  41. package/dist/{agents-new-HKVEIBDJ.js → agents-new-HSH4GQPG.js} +1 -1
  42. package/dist/{agents-new-X6GTHIO6.cjs → agents-new-VYUDOCE7.cjs} +1 -1
  43. package/dist/{autoSkill-6TGBTEQD.js → autoSkill-LQEVQFIH.js} +2 -2
  44. package/dist/autoSkill-X5W52WOE.cjs +20 -0
  45. package/dist/{automode-BC6NVECO.js → automode-R6P3VHLS.js} +1 -1
  46. package/dist/{automode-WN2RSOGW.cjs → automode-SJGM7VEI.cjs} +1 -1
  47. package/dist/{cc-7LEIJ3KF.js → cc-AYEP2CA3.js} +1 -1
  48. package/dist/{cc-Q5MM4AWC.cjs → cc-S2QLQFBR.cjs} +1 -1
  49. package/dist/{chunk-6OYHF6MF.js → chunk-2UC22DJU.js} +3 -3
  50. package/dist/{chunk-N254NRHT.cjs → chunk-3HT76LNN.cjs} +9 -2
  51. package/dist/{chunk-LENHP55G.cjs → chunk-3O3MOK5C.cjs} +151 -44
  52. package/dist/{chunk-72FKPBT5.js → chunk-3VTAFAL2.js} +2 -2
  53. package/dist/{chunk-5P2NXKP3.js → chunk-3WICOC33.js} +27 -23
  54. package/dist/chunk-3WVJEL7K.cjs +568 -0
  55. package/dist/{chunk-O4IF4NJT.cjs → chunk-56SWIDEL.cjs} +7 -7
  56. package/dist/{chunk-CAMZTXV6.js → chunk-5K6NGAVM.js} +1 -1
  57. package/dist/{chunk-MSED7RH2.cjs → chunk-64H4FRM3.cjs} +95 -22
  58. package/dist/{chunk-G3V4SFET.cjs → chunk-7TQH3CL4.cjs} +3 -3
  59. package/dist/{chunk-IKGWDOGU.cjs → chunk-ADUFCS4Q.cjs} +1 -1
  60. package/dist/{chunk-ZVY2XD6T.js → chunk-B53A2NM2.js} +552 -129
  61. package/dist/{chunk-4PKF7WPD.js → chunk-BJXSNT46.js} +3 -3
  62. package/dist/{chunk-IVM5F2AE.js → chunk-BYONM7UM.js} +1 -1
  63. package/dist/{chunk-BWN2CLLM.cjs → chunk-CB4E2T5N.cjs} +19 -5
  64. package/dist/{chunk-RO6WYEWH.js → chunk-DNUOXBHL.js} +85 -0
  65. package/dist/{chunk-DN573ME7.cjs → chunk-DRWDEHE5.cjs} +4 -4
  66. package/dist/{chunk-Q7XSCYND.cjs → chunk-DV2ZHK7B.cjs} +13 -13
  67. package/dist/chunk-EFX2QSZX.cjs +33 -0
  68. package/dist/{chunk-HOAHWIQ5.cjs → chunk-EGPXJERY.cjs} +2 -2
  69. package/dist/{chunk-34M3HWLR.js → chunk-FTYY5JJD.js} +1 -1
  70. package/dist/{chunk-TXSDBGKX.cjs → chunk-GCXYXLRA.cjs} +1 -1
  71. package/dist/chunk-H2ZRHQQV.js +33 -0
  72. package/dist/{chunk-CWMZKFTT.js → chunk-HBZU3RBZ.js} +1 -1
  73. package/dist/{chunk-PRRCJFU3.cjs → chunk-HNRPK5MY.cjs} +2 -2
  74. package/dist/{chunk-LA7H35XM.cjs → chunk-HPHJ73GU.cjs} +1 -1
  75. package/dist/{chunk-33RSHBDH.js → chunk-IDFF5J2E.js} +1 -1
  76. package/dist/{chunk-OGV4WJ5L.cjs → chunk-J2GSFVUV.cjs} +5 -5
  77. package/dist/{chunk-ZQE72E6W.cjs → chunk-JJLYWH5Y.cjs} +7 -7
  78. package/dist/{chunk-WM5PAOTQ.cjs → chunk-K2C56QGS.cjs} +191 -43
  79. package/dist/{chunk-643VRA5S.cjs → chunk-KANW6OYC.cjs} +3 -3
  80. package/dist/{chunk-6HYLHBQG.cjs → chunk-KLWJIPU2.cjs} +4 -4
  81. package/dist/{chunk-FKSDEWDH.js → chunk-KQGPTCQJ.js} +1 -1
  82. package/dist/{chunk-H5SWOLG6.js → chunk-L3TWPROA.js} +3 -3
  83. package/dist/{chunk-JS7IPR7P.js → chunk-LIEXWM2M.js} +12 -1
  84. package/dist/{chunk-J6QET7EF.cjs → chunk-MERYP6AM.cjs} +89 -4
  85. package/dist/{chunk-AS6RTLN7.cjs → chunk-MZAPWNAC.cjs} +48 -44
  86. package/dist/{chunk-CDBPBM2K.cjs → chunk-N2BLVUPM.cjs} +1 -1
  87. package/dist/{chunk-SCXX4LW5.js → chunk-N7LI55V4.js} +1 -1
  88. package/dist/{chunk-FW774QXH.js → chunk-NA6WQDYW.js} +134 -27
  89. package/dist/{chunk-DRE2RXBZ.js → chunk-NAGQ2PDC.js} +164 -16
  90. package/dist/{chunk-MAKMSQMQ.cjs → chunk-NAJ4IZKD.cjs} +2 -2
  91. package/dist/{chunk-JX3DFKBI.js → chunk-NTSDP2WB.js} +1 -1
  92. package/dist/{chunk-3PCTTUNW.cjs → chunk-OUZQXMHL.cjs} +2 -2
  93. package/dist/{chunk-3OTU3RS3.cjs → chunk-PGESAU2W.cjs} +599 -176
  94. package/dist/{chunk-IQ5RXU6O.js → chunk-QEGOB6QV.js} +1 -1
  95. package/dist/{chunk-JSBRDJBE.js → chunk-QGM4M3NI.js} +8 -1
  96. package/dist/{chunk-DSPQEHDT.js → chunk-QXH5RCFI.js} +1 -1
  97. package/dist/{chunk-TBEGGJNC.cjs → chunk-RDF37HKB.cjs} +32 -16
  98. package/dist/{chunk-J4Q7XR3G.js → chunk-SJAVBCOA.js} +1 -1
  99. package/dist/{chunk-AYSFIUFW.js → chunk-SV2WA57F.js} +3 -3
  100. package/dist/{chunk-T73IDKDF.js → chunk-SZOLA6FR.js} +1 -1
  101. package/dist/{chunk-LNMYK2F5.cjs → chunk-T2M64VHA.cjs} +5 -5
  102. package/dist/{chunk-I5IW3T2Y.js → chunk-TUAITHWL.js} +31 -15
  103. package/dist/{chunk-HLQV64Y5.js → chunk-TUD3Z3BD.js} +1 -1
  104. package/dist/{chunk-PGRH5Q77.cjs → chunk-U55TWFJI.cjs} +12 -1
  105. package/dist/{chunk-6RF7UKUS.js → chunk-ULDM2SNB.js} +1 -1
  106. package/dist/{chunk-X5YJ34FZ.cjs → chunk-VEKDGU2Q.cjs} +3 -3
  107. package/dist/{chunk-HQ7YZKXE.js → chunk-VWDHR4HV.js} +2 -2
  108. package/dist/{chunk-L3WAH3EM.cjs → chunk-W7RYQJLO.cjs} +2 -2
  109. package/dist/{chunk-RD5XAJR2.cjs → chunk-X2YOZQIP.cjs} +6 -6
  110. package/dist/{chunk-QOXPOR5D.js → chunk-XVUHNWMX.js} +105 -32
  111. package/dist/{chunk-33A755XB.cjs → chunk-Y45G6ZO5.cjs} +3 -3
  112. package/dist/chunk-ZLSGXMGQ.js +568 -0
  113. package/dist/{chunk-X3WS5LDG.js → chunk-ZSPXQYG2.js} +2 -2
  114. package/dist/{chunk-P47WPOXN.js → chunk-ZYVS43MU.js} +17 -3
  115. package/dist/{clear-ZJ5NYP6E.js → clear-A3N4GK2S.js} +1 -1
  116. package/dist/{clear-UO4MNWZW.cjs → clear-GK4IEUUS.cjs} +1 -1
  117. package/dist/{communityInstaller-6KCFN7YZ.js → communityInstaller-LOP2EDH5.js} +1 -1
  118. package/dist/{communityInstaller-PVSOFDZD.cjs → communityInstaller-XXC7RLE4.cjs} +1 -1
  119. package/dist/{completion-MMF2PN2H.js → completion-HWABSAEL.js} +1 -1
  120. package/dist/{completion-UI5WKHXI.cjs → completion-IUUVQG4D.cjs} +1 -1
  121. package/dist/config-HF7WOLZF.cjs +18 -0
  122. package/dist/{config-ZN66VXPS.js → config-HPJPKTO6.js} +4 -4
  123. package/dist/{constants-UFM5B232.js → constants-LISJW3DD.js} +1 -1
  124. package/dist/{constants-6CPCJ3DY.cjs → constants-PEO3P2SJ.cjs} +1 -1
  125. package/dist/{defaultHooks-RCXPHF4M.cjs → defaultHooks-IHSJR2AX.cjs} +1 -1
  126. package/dist/{defaultHooks-RDRMER3Z.js → defaultHooks-KUKHK3AG.js} +1 -1
  127. package/dist/{export-W22L4D5C.js → export-QJAV2FCZ.js} +1 -1
  128. package/dist/{export-N4XIVDSL.cjs → export-XSRFXGWU.cjs} +1 -1
  129. package/dist/{extractSessionMemories-V7K42ZHW.js → extractSessionMemories-A2JX5WJ2.js} +1 -1
  130. package/dist/{extractSessionMemories-SDW2MVBQ.cjs → extractSessionMemories-XL3MS37F.cjs} +1 -1
  131. package/dist/{feedback-DR6ADSNE.cjs → feedback-4TCIL3ML.cjs} +4 -4
  132. package/dist/{feedback-FEEAP4QW.js → feedback-SJ6VVEY3.js} +3 -3
  133. package/dist/{filesystem-MCFXJQ6R.cjs → filesystem-W56QZUJF.cjs} +1 -1
  134. package/dist/{filesystem-3SGCW2BF.js → filesystem-Z7BWAWMZ.js} +1 -1
  135. package/dist/{formatters-6K7QVWQL.cjs → formatters-53XTCNGQ.cjs} +1 -1
  136. package/dist/{formatters-DQHO5I36.js → formatters-T6KV4BPP.js} +1 -1
  137. package/dist/{help-2BLR7L43.js → help-GFQXNZOK.js} +2 -2
  138. package/dist/help-ISBVQL3S.cjs +12 -0
  139. package/dist/{history-5FZ3M2AK.js → history-E3N6BJP7.js} +1 -1
  140. package/dist/{history-NIUDRMKA.cjs → history-XQ4GTSFU.cjs} +1 -1
  141. package/dist/{hooks-2EY4IPKV.js → hooks-CJNKJ5PF.js} +1 -1
  142. package/dist/{hooks-LJVORRIG.cjs → hooks-UTMBTAXT.cjs} +1 -1
  143. package/dist/{i18n-ARDG2SMC.cjs → i18n-N7QQ7A5M.cjs} +1 -1
  144. package/dist/{i18n-K7QOWIBH.js → i18n-SY7QRM22.js} +1 -1
  145. package/dist/{ide-GFW6IJHD.js → ide-RTA4UJV4.js} +1 -1
  146. package/dist/{ide-N2ZNSSB3.cjs → ide-VWVOLIFF.cjs} +1 -1
  147. package/dist/immediateCommandRouter-BW34JNXL.js +9 -0
  148. package/dist/immediateCommandRouter-SHOVNB5X.cjs +9 -0
  149. package/dist/{import-QEME3E4T.cjs → import-ADI37ZUR.cjs} +4 -4
  150. package/dist/{import-DFVN3KNZ.js → import-KGKKZ3B7.js} +2 -2
  151. package/dist/{import-UXM3VK7B.js → import-W7SVLSTC.js} +4 -4
  152. package/dist/import-ZLJVONXH.cjs +10 -0
  153. package/dist/index.cjs +1713 -1051
  154. package/dist/index.js +1185 -523
  155. package/dist/{init-QNMWLAVY.js → init-7MFK626E.js} +1 -1
  156. package/dist/{init-PY75HA3S.cjs → init-TBKAB4LZ.cjs} +1 -1
  157. package/dist/language-MDSHEXHB.cjs +18 -0
  158. package/dist/{language-UXMHEZUJ.js → language-PXTQSHIG.js} +5 -5
  159. package/dist/{learn-HJ3FLNZC.cjs → learn-623TW5EK.cjs} +5 -5
  160. package/dist/{learn-MVYS3RU5.js → learn-BCPV7GM2.js} +4 -4
  161. package/dist/{lint-D5UOJWIK.cjs → lint-4NDGCSCL.cjs} +1 -1
  162. package/dist/{lint-NJPZWVN2.js → lint-FZ7ZJUB3.js} +1 -1
  163. package/dist/{localProjectPermissions-UFSMNTBJ.cjs → localProjectPermissions-BHQXEWZJ.cjs} +1 -1
  164. package/dist/{localProjectPermissions-N77HA3XK.js → localProjectPermissions-GMOUYQM6.js} +1 -1
  165. package/dist/{login-DSE7H63A.js → login-QMVEETWJ.js} +6 -6
  166. package/dist/{login-V3MEWPKN.cjs → login-QYMXAL3K.cjs} +7 -7
  167. package/dist/{logout-BMVCLKKW.js → logout-2CMTDAOJ.js} +6 -6
  168. package/dist/logout-ZOHVZAUK.cjs +18 -0
  169. package/dist/{mcp-PYUR4PHO.js → mcp-IUVKK65S.js} +5 -5
  170. package/dist/mcp-TXC7PYG3.cjs +18 -0
  171. package/dist/{mcp-install-VESN42PI.js → mcp-install-2FEROZTL.js} +4 -4
  172. package/dist/{mcp-install-G27HSS3Z.cjs → mcp-install-WM6BQRI5.cjs} +5 -5
  173. package/dist/{memory-4ZMMEZ2Z.js → memory-J73WZH2I.js} +1 -1
  174. package/dist/{memory-QSGMVVGH.cjs → memory-WRIHDEPK.cjs} +1 -1
  175. package/dist/{message-ZJ5AYAMT.cjs → message-4OKO775J.cjs} +1 -1
  176. package/dist/{message-JUBOK2VU.js → message-X3LOAAM7.js} +1 -1
  177. package/dist/{model-ZXNV4AF7.js → model-AES267IN.js} +1 -1
  178. package/dist/{model-NANLBZ4Z.cjs → model-RLP75SF5.cjs} +1 -1
  179. package/dist/{new-5QJY5JP2.js → new-5CLF3MKH.js} +1 -1
  180. package/dist/{new-PMMG55UX.cjs → new-HLSFL6A4.cjs} +1 -1
  181. package/dist/{patch-MOD7QC3D.cjs → patch-DJ2GPFST.cjs} +1 -1
  182. package/dist/{patch-5F6VBIT3.js → patch-NIJWIRHS.js} +1 -1
  183. package/dist/{permissions-VP5VGIBL.js → permissions-GP6FTGZ2.js} +1 -1
  184. package/dist/{permissions-LECTCJ4H.cjs → permissions-O6EKKPOG.cjs} +1 -1
  185. package/dist/{plan-G5CEKJI4.js → plan-65HMS5HQ.js} +1 -1
  186. package/dist/{plan-QKOHE3LH.cjs → plan-MCAXDIM2.cjs} +1 -1
  187. package/dist/{quit-BKOOPHU5.cjs → quit-TQX6GXA5.cjs} +1 -1
  188. package/dist/{quit-FVFNYACP.js → quit-XDZYRSPU.js} +1 -1
  189. package/dist/{registry-YN4FQPOO.cjs → registry-IVT4G2RT.cjs} +1 -1
  190. package/dist/{registry-KWZGYJC2.js → registry-PTHWERKC.js} +1 -1
  191. package/dist/repeat-BSPS5TWD.cjs +13 -0
  192. package/dist/repeat-EVCWUL6Z.js +13 -0
  193. package/dist/{resume-PP2IQM5S.cjs → resume-2GOPDLL4.cjs} +1 -1
  194. package/dist/{resume-EXFQSQPH.js → resume-37IUVDA6.js} +1 -1
  195. package/dist/search-7KUSHIBL.cjs +17 -0
  196. package/dist/{search-XGZDYBF4.js → search-OJGDRIMA.js} +5 -5
  197. package/dist/{session-BSU2L5UI.cjs → session-LXKC4X5Q.cjs} +1 -1
  198. package/dist/{session-SZMRN5KG.js → session-NMMO4QOL.js} +1 -1
  199. package/dist/{sessions-54KI3F2Q.js → sessions-6GWEBMKS.js} +1 -1
  200. package/dist/{sessions-DDTSPNVW.cjs → sessions-CYYCHSQG.cjs} +1 -1
  201. package/dist/settings-2D7CAO66.cjs +30 -0
  202. package/dist/{settings-FHRDFPLK.js → settings-BXR6SBJP.js} +5 -5
  203. package/dist/{share-TGROUE6R.js → share-BXQY5IQU.js} +3 -3
  204. package/dist/share-OSFXZBGS.cjs +14 -0
  205. package/dist/skills-FL6O6AOM.cjs +26 -0
  206. package/dist/{skills-FYY6F2WV.cjs → skills-PG542VEB.cjs} +1 -1
  207. package/dist/{skills-S3GRN323.js → skills-PNKQZRNK.js} +2 -2
  208. package/dist/{skills-6OL4OSGA.js → skills-ZZCIAS7C.js} +1 -1
  209. package/dist/{skills-install-O3LZ2ETC.cjs → skills-install-67DOBPJC.cjs} +1 -1
  210. package/dist/{skills-install-6CSWC24P.js → skills-install-SRC3Z2MS.js} +1 -1
  211. package/dist/{skills-new-PWLKK7GW.cjs → skills-new-XFMEHHIF.cjs} +1 -1
  212. package/dist/{skills-new-ALD2PTHN.js → skills-new-ZNZPHUKS.js} +1 -1
  213. package/dist/{slashCommands-L4ZD33LJ.js → slashCommands-LLCNPK3X.js} +27 -26
  214. package/dist/{slashCommands-YY2VUUDF.cjs → slashCommands-RXZZS6RE.cjs} +28 -27
  215. package/dist/status-BCECUJXT.cjs +11 -0
  216. package/dist/{status-KCLVOYPD.js → status-EFO7MQU3.js} +3 -3
  217. package/dist/{sync-6SDWG5RK.js → sync-IJYJ6KKM.js} +5 -5
  218. package/dist/sync-LFT6SBPF.cjs +18 -0
  219. package/dist/{sync-7JMZVEQD.cjs → sync-U7SDPBNZ.cjs} +1 -1
  220. package/dist/{sync-KWX67OUN.js → sync-VU2NSJ4O.js} +1 -1
  221. package/dist/{tasks-5FPBIFLC.js → tasks-R5MBGAQ6.js} +1 -1
  222. package/dist/{tasks-TXGKGNH6.cjs → tasks-V4WB3MFR.cjs} +1 -1
  223. package/dist/{team-5YXP3JGR.js → team-JESCHGWB.js} +1 -1
  224. package/dist/{team-IIWEZKNR.cjs → team-VQQKWGZB.cjs} +1 -1
  225. package/dist/{teammate-L6EZQ3I2.js → teammate-SD26GR37.js} +7 -7
  226. package/dist/{teammate-2KMKJXAM.cjs → teammate-SXRVXNQV.cjs} +7 -7
  227. package/dist/theme-AWBHSG7J.cjs +18 -0
  228. package/dist/{theme-YMFCQP7J.js → theme-TQLBPJ2E.js} +5 -5
  229. package/dist/ui/questionModal.cjs +1 -1
  230. package/dist/ui/questionModal.js +1 -1
  231. package/dist/{undo-KZHUUZTD.cjs → undo-IBBGP7A2.cjs} +1 -1
  232. package/dist/{undo-NEIEHQVX.js → undo-OL2EDBRY.js} +1 -1
  233. package/dist/{update-TVAJMMBC.js → update-53WMKYVS.js} +1 -1
  234. package/dist/{update-Z6BIIQDC.cjs → update-NV6QRYY7.cjs} +1 -1
  235. package/package.json +1 -1
  236. package/dist/HookManager-Q2KYMCP4.cjs +0 -7
  237. package/dist/HookManager-TTP4Y6DC.js +0 -7
  238. package/dist/LearnAdvisor-A4Q5PPBI.js +0 -9
  239. package/dist/LearnAdvisor-GASQD7HT.cjs +0 -9
  240. package/dist/PermissionManager-KMN53FJP.cjs +0 -11
  241. package/dist/ProviderFactory-VFGCJJX6.cjs +0 -9
  242. package/dist/about-HHTF2YFL.js +0 -12
  243. package/dist/about-JGRVNNQC.cjs +0 -12
  244. package/dist/autoSkill-H4T6VVDA.cjs +0 -20
  245. package/dist/config-E7RINK4R.cjs +0 -18
  246. package/dist/help-AQHGTS7P.cjs +0 -12
  247. package/dist/import-ZS6DPGU5.cjs +0 -10
  248. package/dist/language-5UE4G2BT.cjs +0 -18
  249. package/dist/logout-XEG7FHOZ.cjs +0 -18
  250. package/dist/mcp-SG6JFLGC.cjs +0 -18
  251. package/dist/search-C56FBN67.cjs +0 -17
  252. package/dist/settings-BDO37TTO.cjs +0 -30
  253. package/dist/share-IERCTBGN.cjs +0 -14
  254. package/dist/skills-OM4IGBAA.cjs +0 -26
  255. package/dist/status-3PC5XWSS.cjs +0 -11
  256. package/dist/sync-WHURZL3U.cjs +0 -18
  257. package/dist/theme-BE5A4FPN.cjs +0 -18
@@ -0,0 +1,568 @@
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/commands/repeat.ts
2
+ var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
3
+ var metadata = {
4
+ command: "/repeat",
5
+ description: "Schedule a recurring prompt at a fixed interval",
6
+ implemented: true,
7
+ subcommands: [
8
+ { name: "list", description: "Show all active recurring jobs" },
9
+ { name: "cancel", description: "Cancel a recurring job by ID" },
10
+ { name: "help", description: "Show usage and examples" }
11
+ ]
12
+ };
13
+ var DEFAULT_INTERVAL = "5m";
14
+ var LEADING_INTERVAL_RE = /^\d+[smhd]$/;
15
+ var LEADING_EVERY_RE = /^every\s+(\d+)?\s*(s(?:ec(?:ond)?s?)?|m(?:in(?:ute)?s?)?|h(?:(?:ou)?rs?)?|d(?:ays?)?)\s+/i;
16
+ var TRAILING_EVERY_RE = /\s+every\s+(\d+)?\s*(s(?:ec(?:ond)?s?)?|m(?:in(?:ute)?s?)?|h(?:(?:ou)?rs?)?|d(?:ays?)?)$/i;
17
+ var MIDDLE_EVERY_RE = /\s+every\s+(\d+)?\s*(s(?:ec(?:ond)?s?)?|m(?:in(?:ute)?s?)?|h(?:(?:ou)?rs?)?|d(?:ays?)?)\s+/i;
18
+ var UNIT_MAP = {
19
+ s: "s",
20
+ sec: "s",
21
+ secs: "s",
22
+ second: "s",
23
+ seconds: "s",
24
+ m: "m",
25
+ min: "m",
26
+ mins: "m",
27
+ minute: "m",
28
+ minutes: "m",
29
+ h: "h",
30
+ hr: "h",
31
+ hrs: "h",
32
+ hour: "h",
33
+ hours: "h",
34
+ d: "d",
35
+ day: "d",
36
+ days: "d"
37
+ };
38
+ function parseInput(raw) {
39
+ const trimmed = raw.trim();
40
+ const parts = trimmed.split(/\s+/);
41
+ if (parts.length >= 1 && LEADING_INTERVAL_RE.test(parts[0])) {
42
+ return {
43
+ interval: parts[0],
44
+ prompt: parts.slice(1).join(" "),
45
+ explicit: true
46
+ };
47
+ }
48
+ const leadingMatch = trimmed.match(LEADING_EVERY_RE);
49
+ if (leadingMatch) {
50
+ const n = leadingMatch[1] || "1";
51
+ const rawUnit = leadingMatch[2].toLowerCase();
52
+ const unit = UNIT_MAP[rawUnit];
53
+ if (unit) {
54
+ return {
55
+ interval: `${n}${unit}`,
56
+ prompt: trimmed.slice(leadingMatch[0].length).trim(),
57
+ explicit: true
58
+ };
59
+ }
60
+ }
61
+ const trailingMatch = trimmed.match(TRAILING_EVERY_RE);
62
+ if (trailingMatch) {
63
+ const n = trailingMatch[1] || "1";
64
+ const rawUnit = trailingMatch[2].toLowerCase();
65
+ const unit = UNIT_MAP[rawUnit];
66
+ if (unit) {
67
+ return {
68
+ interval: `${n}${unit}`,
69
+ prompt: trimmed.slice(0, trailingMatch.index).trim(),
70
+ explicit: true
71
+ };
72
+ }
73
+ }
74
+ const middleMatch = trimmed.match(MIDDLE_EVERY_RE);
75
+ if (middleMatch) {
76
+ const n = middleMatch[1] || "1";
77
+ const rawUnit = middleMatch[2].toLowerCase();
78
+ const unit = UNIT_MAP[rawUnit];
79
+ if (unit) {
80
+ const before = trimmed.slice(0, middleMatch.index).trim();
81
+ const after = trimmed.slice(middleMatch.index + middleMatch[0].length).trim();
82
+ const prompt = [before, after].filter(Boolean).join(" ");
83
+ return {
84
+ interval: `${n}${unit}`,
85
+ prompt,
86
+ explicit: true
87
+ };
88
+ }
89
+ }
90
+ return {
91
+ interval: DEFAULT_INTERVAL,
92
+ prompt: trimmed,
93
+ explicit: false
94
+ };
95
+ }
96
+ function intervalToCron(interval) {
97
+ const match = interval.match(/^(\d+)([smhd])$/);
98
+ if (!match) {
99
+ throw new Error(`Invalid interval format: ${interval}`);
100
+ }
101
+ let n = parseInt(match[1], 10);
102
+ const unit = match[2];
103
+ if (unit === "s") {
104
+ const minutes = Math.max(1, Math.ceil(n / 60));
105
+ const roundedNote = `Rounded ${n}s up to ${minutes}m (cron minimum granularity is 1 minute).`;
106
+ return intervalToCronMinutes(minutes, roundedNote);
107
+ }
108
+ if (unit === "m") {
109
+ return intervalToCronMinutes(n);
110
+ }
111
+ if (unit === "h") {
112
+ if (n <= 0) throw new Error("Hour interval must be >= 1");
113
+ if (n > 23) {
114
+ const days = Math.round(n / 24);
115
+ const roundedNote2 = `Rounded ${n}h to ${days}d (${days * 24}h).`;
116
+ return {
117
+ cronExpression: `0 0 */${days} * *`,
118
+ intervalMs: days * 24 * 60 * 60 * 1e3,
119
+ humanReadable: `every ${days} day${days > 1 ? "s" : ""} at midnight`,
120
+ roundedNote: roundedNote2
121
+ };
122
+ }
123
+ let roundedNote;
124
+ if (24 % n !== 0) {
125
+ const clean = nearestDivisor(n, 24);
126
+ roundedNote = `${n}h doesn't divide 24 evenly; rounded to every ${clean}h.`;
127
+ n = clean;
128
+ }
129
+ return {
130
+ cronExpression: `0 */${n} * * *`,
131
+ intervalMs: n * 60 * 60 * 1e3,
132
+ humanReadable: `every ${n} hour${n > 1 ? "s" : ""}`,
133
+ roundedNote
134
+ };
135
+ }
136
+ if (n <= 0) throw new Error("Day interval must be >= 1");
137
+ return {
138
+ cronExpression: `0 0 */${n} * *`,
139
+ intervalMs: n * 24 * 60 * 60 * 1e3,
140
+ humanReadable: `every ${n} day${n > 1 ? "s" : ""} at midnight`
141
+ };
142
+ }
143
+ function intervalToCronMinutes(n, roundedNote) {
144
+ if (n <= 0) throw new Error("Minute interval must be >= 1");
145
+ if (n < 60) {
146
+ let note2 = roundedNote;
147
+ if (60 % n !== 0) {
148
+ const clean = nearestDivisor(n, 60);
149
+ note2 = (note2 ? note2 + " " : "") + `${n}m doesn't divide 60 evenly; rounded to every ${clean}m.`;
150
+ n = clean;
151
+ }
152
+ return {
153
+ cronExpression: `*/${n} * * * *`,
154
+ intervalMs: n * 60 * 1e3,
155
+ humanReadable: `every ${n} minute${n > 1 ? "s" : ""}`,
156
+ roundedNote: note2
157
+ };
158
+ }
159
+ let hours = Math.round(n / 60);
160
+ if (hours <= 0) hours = 1;
161
+ let note = roundedNote;
162
+ if (24 % hours !== 0) {
163
+ const clean = nearestDivisor(hours, 24);
164
+ note = (note ? note + " " : "") + `${n}m rounds to ${hours}h which doesn't divide 24; using every ${clean}h.`;
165
+ hours = clean;
166
+ } else if (n !== hours * 60) {
167
+ note = (note ? note + " " : "") + `Rounded ${n}m to ${hours}h.`;
168
+ }
169
+ return {
170
+ cronExpression: `0 */${hours} * * *`,
171
+ intervalMs: hours * 60 * 60 * 1e3,
172
+ humanReadable: `every ${hours} hour${hours > 1 ? "s" : ""}`,
173
+ roundedNote: note
174
+ };
175
+ }
176
+ function nearestDivisor(n, max) {
177
+ let best = 1;
178
+ for (let d = 1; d <= max; d++) {
179
+ if (max % d === 0 && Math.abs(d - n) < Math.abs(best - n)) {
180
+ best = d;
181
+ }
182
+ }
183
+ return best;
184
+ }
185
+ function shorthandToMs(shorthand) {
186
+ const match = shorthand.match(/^(\d+)([smhd])$/);
187
+ if (!match) return 3 * 24 * 60 * 60 * 1e3;
188
+ const n = parseInt(match[1], 10);
189
+ const unit = match[2];
190
+ switch (unit) {
191
+ case "s":
192
+ return n * 1e3;
193
+ case "m":
194
+ return n * 60 * 1e3;
195
+ case "h":
196
+ return n * 60 * 60 * 1e3;
197
+ case "d":
198
+ return n * 24 * 60 * 60 * 1e3;
199
+ default:
200
+ return 3 * 24 * 60 * 60 * 1e3;
201
+ }
202
+ }
203
+ function shorthandToHuman(shorthand) {
204
+ const match = shorthand.match(/^(\d+)([smhd])$/);
205
+ if (!match) return shorthand;
206
+ const n = parseInt(match[1], 10);
207
+ const unit = match[2];
208
+ const names = { s: "second", m: "minute", h: "hour", d: "day" };
209
+ const name = _nullishCoalesce(names[unit], () => ( unit));
210
+ return `${n} ${name}${n !== 1 ? "s" : ""}`;
211
+ }
212
+ var REPEAT_SYSTEM_PROMPT = `# Goal
213
+ Extract a recurring schedule from natural language. Return the interval and the actionable task as JSON.
214
+
215
+ # Persona
216
+ You are a scheduling intent parser for a CLI coding agent. You receive raw user input and decompose it into exactly two parts: how often (interval) and what to do (prompt). You are precise, never hallucinate fields, and always return valid JSON.
217
+
218
+ # Action
219
+ Return ONLY a JSON object with these fields:
220
+ - "interval": (required) shorthand format <number><unit> where unit is s, m, h, or d (e.g. "5m", "2h", "1d")
221
+ - "prompt": (required) the actionable task, cleaned of all scheduling language and conversational filler
222
+ - "maxRuns": (optional, integer) if the user specifies a finite execution count, include it. Omit if unlimited.
223
+ - "expiresIn": (optional, shorthand like interval) if the user specifies a custom duration/deadline, include it. Omit to use the default 3-day expiry.
224
+
225
+ ## Interval extraction rules (in priority order)
226
+
227
+ 1. Explicit frequency \u2192 convert directly:
228
+ "every 5 minutes" \u2192 "5m" | "every 2 hours" \u2192 "2h" | "every 30 seconds" \u2192 "30s" | "every 3 days" \u2192 "3d"
229
+
230
+ 2. Named frequencies \u2192 map to interval:
231
+ "every minute" \u2192 "1m" | "every hour" \u2192 "1h" | "every day" \u2192 "1d" | "every second" \u2192 "1s"
232
+ "hourly" \u2192 "1h" | "daily" \u2192 "1d" | "every half hour" \u2192 "30m" | "every quarter hour" \u2192 "15m"
233
+
234
+ 3. Multiplicative expressions \u2192 compute interval:
235
+ "twice an hour" \u2192 "30m" | "three times an hour" \u2192 "20m" | "once an hour" \u2192 "1h"
236
+ "twice a day" \u2192 "12h" | "three times a day" \u2192 "8h" | "once a day" \u2192 "1d"
237
+
238
+ 4. Colloquial / vague frequencies \u2192 best-effort:
239
+ "every couple of minutes" \u2192 "2m" | "every few minutes" \u2192 "5m" | "every other hour" \u2192 "2h"
240
+ "continuously" / "nonstop" / "constantly" \u2192 "1m" | "periodically" / "frequently" / "regularly" \u2192 "5m"
241
+
242
+ 5. Implied repetition words are scheduling intent \u2014 strip them from the prompt:
243
+ "keep running tests" \u2192 interval "1m", prompt "run tests"
244
+ "keep checking the build" \u2192 interval "1m", prompt "check the build"
245
+ "repeatedly lint the codebase" \u2192 interval "5m", prompt "lint the codebase"
246
+
247
+ 6. Unsupported time scales \u2192 clamp to "1d":
248
+ "weekly" / "monthly" / "every week" / "every month" \u2192 "1d"
249
+
250
+ 7. No frequency detected at all \u2192 use "5m" as default.
251
+
252
+ ## Disambiguation: conflicting interval signals
253
+
254
+ When the input contains multiple time references that could be intervals, apply these rules:
255
+ 1. The most specific/granular interval wins as the "interval" field.
256
+ 2. The broader time reference becomes "expiresIn" context (if it specifies a duration).
257
+
258
+ Granularity order (most specific first): seconds \u2192 minutes \u2192 hours \u2192 days.
259
+
260
+ Examples:
261
+ - "every day run this command with intervals of 10 minutes per run" \u2192 interval: "10m", expiresIn: "1d"
262
+ ("intervals of 10 minutes" is more specific than "every day")
263
+ - "check deploy every day for a week at 10 minute intervals" \u2192 interval: "10m", expiresIn: "7d"
264
+ - "run tests daily with 5 minute checks" \u2192 interval: "5m", expiresIn: "1d"
265
+ - "every hour check build every 2 minutes" \u2192 interval: "2m", expiresIn: "1h"
266
+
267
+ ## Execution count extraction (maxRuns)
268
+
269
+ When the user specifies a finite number of executions, extract it as "maxRuns":
270
+ - "only 10 times" \u2192 maxRuns: 10
271
+ - "do this 5 times" \u2192 maxRuns: 5
272
+ - "repeat 3 times" \u2192 maxRuns: 3
273
+ - "just once" / "one time" \u2192 maxRuns: 1
274
+ - "twice" / "two times" \u2192 maxRuns: 2
275
+ - No count mentioned \u2192 omit maxRuns entirely
276
+
277
+ Strip the count language from the prompt (e.g. "only 10 times", "5 times", "twice").
278
+
279
+ ## Custom expiry extraction (expiresIn)
280
+
281
+ When the user specifies a duration/deadline for how long the job should stay active, extract it as "expiresIn":
282
+ - "for the next week" / "for a week" \u2192 expiresIn: "7d"
283
+ - "for 2 days" \u2192 expiresIn: "2d"
284
+ - "for the next hour" \u2192 expiresIn: "1h"
285
+ - "until tomorrow" \u2192 expiresIn: "1d"
286
+ - "for 30 minutes" \u2192 expiresIn: "30m"
287
+ - No duration mentioned \u2192 omit expiresIn entirely (default: 3 days)
288
+
289
+ Strip the expiry language from the prompt.
290
+
291
+ ## Prompt cleaning rules
292
+
293
+ 1. Strip conversational filler: remove leading "can you", "could you", "please", "I want you to", "I need you to", "go ahead and", "make sure to", "try to".
294
+ 2. Strip scheduling language: remove "every X minutes", "hourly", "daily", "continuously", "keep", "repeatedly", "nonstop", "on repeat", "periodically", etc.
295
+ 3. Preserve slash commands and their arguments verbatim: "/deploy staging", "/babysit-prs", "/lint --fix".
296
+ 4. Preserve technical content exactly: file paths, command flags, branch names, URLs.
297
+ 5. Do NOT rephrase or summarize the task \u2014 keep the user's own words minus filler and scheduling.
298
+
299
+ ## Disambiguation: "every" as quantifier vs frequency
300
+
301
+ "every" followed by a time expression (number + unit, or time noun) = frequency \u2192 extract it.
302
+ "every" followed by a non-time noun = quantifier (part of the task) \u2192 keep it in the prompt.
303
+
304
+ Frequency: "check deploy every 5 minutes", "run hourly", "every 2h run tests"
305
+ Quantifier: "check every PR", "review every file", "test every endpoint", "lint every module"
306
+
307
+ ## Disambiguation: time words inside task names
308
+
309
+ If a time word (hourly, daily, etc.) is part of a compound noun or script name, it describes the TASK, not the frequency.
310
+ "run the hourly backup script" \u2192 interval "5m", prompt "run the hourly backup script"
311
+ "check the daily report" \u2192 interval "5m", prompt "check the daily report"
312
+ "execute the 5-minute health check" \u2192 interval "5m", prompt "execute the 5-minute health check"
313
+
314
+ # Examples
315
+
316
+ Input: "can you run tests every 5 minutes"
317
+ Output: {"interval":"5m","prompt":"run tests"}
318
+
319
+ Input: "please check the deploy hourly"
320
+ Output: {"interval":"1h","prompt":"check the deploy"}
321
+
322
+ Input: "navigate to my gh pr list and pick one item to work on every 2 minutes"
323
+ Output: {"interval":"2m","prompt":"navigate to my gh pr list and pick one item to work on"}
324
+
325
+ Input: "make a git commit with empty message to trigger ci cd hourly"
326
+ Output: {"interval":"1h","prompt":"make a git commit with empty message to trigger ci cd"}
327
+
328
+ Input: "check for new issues on github twice an hour"
329
+ Output: {"interval":"30m","prompt":"check for new issues on github"}
330
+
331
+ Input: "run the test suite"
332
+ Output: {"interval":"5m","prompt":"run the test suite"}
333
+
334
+ Input: "keep monitoring the logs"
335
+ Output: {"interval":"1m","prompt":"monitor the logs"}
336
+
337
+ Input: "check every PR for review comments"
338
+ Output: {"interval":"5m","prompt":"check every PR for review comments"}
339
+
340
+ Input: "I want you to continuously watch the build pipeline"
341
+ Output: {"interval":"1m","prompt":"watch the build pipeline"}
342
+
343
+ Input: "run the hourly backup script every 30m"
344
+ Output: {"interval":"30m","prompt":"run the hourly backup script"}
345
+
346
+ Input: "/deploy staging every 10m"
347
+ Output: {"interval":"10m","prompt":"/deploy staging"}
348
+
349
+ Input: "could you maybe check if the tests pass"
350
+ Output: {"interval":"5m","prompt":"check if the tests pass"}
351
+
352
+ Input: "check for git commits from origin every minute"
353
+ Output: {"interval":"1m","prompt":"check for git commits from origin"}
354
+
355
+ Input: "tell me a joke every 2 minutes only 10 times"
356
+ Output: {"interval":"2m","prompt":"tell me a joke","maxRuns":10}
357
+
358
+ Input: "check PRs every day for the next week"
359
+ Output: {"interval":"1d","prompt":"check PRs","expiresIn":"7d"}
360
+
361
+ Input: "run tests every 5m do this 3 times"
362
+ Output: {"interval":"5m","prompt":"run tests","maxRuns":3}
363
+
364
+ Input: "check build every hour only 5 times for 2 days"
365
+ Output: {"interval":"1h","prompt":"check build","maxRuns":5,"expiresIn":"2d"}
366
+
367
+ Input: "every day run echo hello world with intervals of 10 minutes per run"
368
+ Output: {"interval":"10m","prompt":"run echo hello world","expiresIn":"1d"}
369
+
370
+ Input: "every hour check build every 2 minutes"
371
+ Output: {"interval":"2m","prompt":"check build","expiresIn":"1h"}`;
372
+ async function llmParseInput(raw, llm) {
373
+ try {
374
+ const response = await llm.complete({
375
+ messages: [
376
+ { role: "system", content: REPEAT_SYSTEM_PROMPT },
377
+ { role: "user", content: raw }
378
+ ],
379
+ maxTokens: 200,
380
+ temperature: 0
381
+ });
382
+ const text = response.content.trim();
383
+ const jsonMatch = text.match(/\{[\s\S]*\}/);
384
+ if (!jsonMatch) return parseInput(raw);
385
+ const parsed = JSON.parse(jsonMatch[0]);
386
+ const interval = typeof parsed.interval === "string" ? parsed.interval : DEFAULT_INTERVAL;
387
+ const prompt = typeof parsed.prompt === "string" ? parsed.prompt : "";
388
+ if (!/^\d+[smhd]$/.test(interval)) return parseInput(raw);
389
+ const maxRuns = typeof parsed.maxRuns === "number" && Number.isInteger(parsed.maxRuns) && parsed.maxRuns > 0 ? parsed.maxRuns : void 0;
390
+ const expiresIn = typeof parsed.expiresIn === "string" && /^\d+[smhd]$/.test(parsed.expiresIn) ? parsed.expiresIn : void 0;
391
+ return { interval, prompt, maxRuns, expiresIn };
392
+ } catch (e) {
393
+ return parseInput(raw);
394
+ }
395
+ }
396
+ async function repeat(ctx, args = []) {
397
+ if (!ctx.repeatManager) {
398
+ return _chalk2.default.yellow("Repeat manager not available.");
399
+ }
400
+ const raw = args.join(" ").trim();
401
+ if (_optionalChain([args, 'access', _ => _[0], 'optionalAccess', _2 => _2.toLowerCase, 'call', _3 => _3()]) === "help") {
402
+ return showUsage();
403
+ }
404
+ if (_optionalChain([args, 'access', _4 => _4[0], 'optionalAccess', _5 => _5.toLowerCase, 'call', _6 => _6()]) === "cancel") {
405
+ const id = _optionalChain([args, 'access', _7 => _7[1], 'optionalAccess', _8 => _8.trim, 'call', _9 => _9()]);
406
+ if (!id) {
407
+ return _chalk2.default.yellow("Usage: /repeat cancel <job-id>");
408
+ }
409
+ const ok = ctx.repeatManager.cancel(id);
410
+ return ok ? _chalk2.default.green(`Cancelled recurring job ${_chalk2.default.bold(id)}.`) : _chalk2.default.yellow(`No active job with ID ${_chalk2.default.bold(id)}.`);
411
+ }
412
+ if (_optionalChain([args, 'access', _10 => _10[0], 'optionalAccess', _11 => _11.toLowerCase, 'call', _12 => _12()]) === "list") {
413
+ const jobs = ctx.repeatManager.list();
414
+ if (jobs.length === 0) {
415
+ return _chalk2.default.gray("No recurring jobs scheduled.");
416
+ }
417
+ const lines2 = [_chalk2.default.bold("Active recurring jobs:"), ""];
418
+ for (const job2 of jobs) {
419
+ const remaining = Math.max(0, job2.expiresAt - Date.now());
420
+ const hoursLeft = Math.round(remaining / (60 * 60 * 1e3));
421
+ lines2.push(
422
+ ` ${_chalk2.default.cyan(job2.id)} ${_chalk2.default.white(job2.humanInterval)} ${_chalk2.default.gray(job2.cronExpression)}`,
423
+ ` ${_chalk2.default.gray("prompt:")} ${job2.prompt}`
424
+ );
425
+ if (job2.maxRuns !== void 0) {
426
+ lines2.push(` ${_chalk2.default.gray(`runs: ${job2.runCount}/${job2.maxRuns}`)}`);
427
+ }
428
+ lines2.push(
429
+ ` ${_chalk2.default.gray(`expires in ~${hoursLeft}h`)}`,
430
+ ""
431
+ );
432
+ }
433
+ return lines2.join("\n");
434
+ }
435
+ if (!raw) {
436
+ return showUsage();
437
+ }
438
+ if (args.length === 1) {
439
+ const SUBCOMMANDS = ["list", "cancel", "help"];
440
+ const firstArg = args[0].toLowerCase();
441
+ if (!SUBCOMMANDS.includes(firstArg)) {
442
+ const closest = findClosestSubcommand(firstArg, SUBCOMMANDS);
443
+ if (closest) {
444
+ return _chalk2.default.yellow(`Unknown subcommand "${args[0]}". Did you mean ${_chalk2.default.bold(`/repeat ${closest}`)}?`) + "\n\n" + showUsage();
445
+ }
446
+ }
447
+ }
448
+ let interval;
449
+ let prompt;
450
+ let maxRuns;
451
+ let expiresIn;
452
+ if (ctx.llm) {
453
+ console.log(_chalk2.default.gray("Parsing schedule..."));
454
+ const llmResult = await llmParseInput(raw, ctx.llm);
455
+ interval = llmResult.interval;
456
+ prompt = llmResult.prompt;
457
+ maxRuns = llmResult.maxRuns;
458
+ expiresIn = llmResult.expiresIn;
459
+ } else {
460
+ const regexResult = parseInput(raw);
461
+ interval = regexResult.interval;
462
+ prompt = regexResult.prompt;
463
+ }
464
+ if (!prompt) {
465
+ return showUsage();
466
+ }
467
+ let cron;
468
+ try {
469
+ cron = intervalToCron(interval);
470
+ } catch (err) {
471
+ return _chalk2.default.red(`Invalid interval "${interval}": ${err.message}`);
472
+ }
473
+ const expiresInMs = expiresIn ? shorthandToMs(expiresIn) : void 0;
474
+ const expiresInHuman = expiresIn ? shorthandToHuman(expiresIn) : void 0;
475
+ const job = ctx.repeatManager.schedule(prompt, cron.intervalMs, cron.cronExpression, cron.humanReadable, {
476
+ maxRuns,
477
+ expiresInMs
478
+ });
479
+ const lines = [
480
+ _chalk2.default.green("Recurring job scheduled!"),
481
+ "",
482
+ ` ${_chalk2.default.gray("Job ID:")} ${_chalk2.default.cyan(job.id)}`,
483
+ ` ${_chalk2.default.gray("Prompt:")} ${prompt}`,
484
+ ` ${_chalk2.default.gray("Cadence:")} ${cron.humanReadable}`,
485
+ ` ${_chalk2.default.gray("Cron:")} ${cron.cronExpression}`
486
+ ];
487
+ if (maxRuns !== void 0) {
488
+ lines.push(` ${_chalk2.default.gray("Limit:")} ${maxRuns} runs`);
489
+ }
490
+ if (cron.roundedNote) {
491
+ lines.push(` ${_chalk2.default.yellow("Note:")} ${cron.roundedNote}`);
492
+ }
493
+ const expiryLabel = _nullishCoalesce(expiresInHuman, () => ( "3 days"));
494
+ lines.push(
495
+ "",
496
+ _chalk2.default.gray(`Recurring jobs auto-expire after ${expiryLabel}.`),
497
+ _chalk2.default.gray(`Cancel sooner with: /repeat cancel ${job.id}`),
498
+ ""
499
+ );
500
+ return lines.join("\n");
501
+ }
502
+ function levenshtein(a, b) {
503
+ const m = a.length, n = b.length;
504
+ const dp = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0));
505
+ for (let i = 0; i <= m; i++) dp[i][0] = i;
506
+ for (let j = 0; j <= n; j++) dp[0][j] = j;
507
+ for (let i = 1; i <= m; i++) {
508
+ for (let j = 1; j <= n; j++) {
509
+ dp[i][j] = a[i - 1] === b[j - 1] ? dp[i - 1][j - 1] : 1 + Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]);
510
+ }
511
+ }
512
+ return dp[m][n];
513
+ }
514
+ function findClosestSubcommand(input, subcommands) {
515
+ let best = null;
516
+ let bestDist = 3;
517
+ for (const cmd of subcommands) {
518
+ const dist = levenshtein(input, cmd);
519
+ if (dist < bestDist) {
520
+ bestDist = dist;
521
+ best = cmd;
522
+ }
523
+ }
524
+ return best;
525
+ }
526
+ function showUsage() {
527
+ return `
528
+ ${_chalk2.default.cyan("/repeat \u2014 Schedule a recurring prompt")}
529
+
530
+ ${_chalk2.default.yellow("Usage:")}
531
+ /repeat [interval] <prompt> Schedule a recurring prompt
532
+ /repeat list Show active jobs
533
+ /repeat cancel <id> Cancel a job
534
+
535
+ ${_chalk2.default.yellow("Interval formats:")}
536
+ 5m every 5 minutes
537
+ 2h every 2 hours
538
+ 1d every day
539
+ 30s every 30 seconds (rounded to 1m)
540
+
541
+ ${_chalk2.default.yellow("Examples:")}
542
+ /repeat 5m run tests
543
+ /repeat check the deploy every 20m
544
+ /repeat run tests every 5 minutes
545
+ /repeat 2h check build status
546
+ /repeat list
547
+ /repeat cancel abc123
548
+ `;
549
+ }
550
+
551
+
552
+
553
+
554
+
555
+
556
+ exports.metadata = metadata; exports.parseInput = parseInput; exports.intervalToCron = intervalToCron; exports.repeat = repeat;
557
+ /**
558
+ * @license
559
+ * Copyright 2025 Autohand AI LLC
560
+ * SPDX-License-Identifier: Apache-2.0
561
+ *
562
+ * /repeat — schedule a recurring prompt at a fixed interval.
563
+ *
564
+ * Usage:
565
+ * /repeat [interval] <prompt>
566
+ * /repeat cancel <id>
567
+ * /repeat list
568
+ */
@@ -7,7 +7,7 @@ var _chunkNNPAM4HCcjs = require('./chunk-NNPAM4HC.cjs');
7
7
 
8
8
 
9
9
 
10
- var _chunkBWN2CLLMcjs = require('./chunk-BWN2CLLM.cjs');
10
+ var _chunkCB4E2T5Ncjs = require('./chunk-CB4E2T5N.cjs');
11
11
 
12
12
 
13
13
  var _chunkSEKD5FH3cjs = require('./chunk-SEKD5FH3.cjs');
@@ -176,13 +176,13 @@ async function loadConfigForScope(scopeInput, workspaceRoot) {
176
176
  throw new Error(`Invalid scope "${scopeInput}". Use: user or project.`);
177
177
  }
178
178
  if (scope === "user") {
179
- return { config: await _chunkBWN2CLLMcjs.loadConfig.call(void 0, ), scope };
179
+ return { config: await _chunkCB4E2T5Ncjs.loadConfig.call(void 0, ), scope };
180
180
  }
181
181
  if (!workspaceRoot) {
182
182
  throw new Error("Workspace root is required for project scope.");
183
183
  }
184
184
  const projectConfigPath = _path2.default.join(workspaceRoot, _chunkSEKD5FH3cjs.PROJECT_DIR_NAME, "config.json");
185
- return { config: await _chunkBWN2CLLMcjs.loadConfig.call(void 0, projectConfigPath), scope };
185
+ return { config: await _chunkCB4E2T5Ncjs.loadConfig.call(void 0, projectConfigPath), scope };
186
186
  }
187
187
  function syncRuntimeConfig(runtimeConfig, updatedConfig) {
188
188
  if (!runtimeConfig) return;
@@ -439,7 +439,7 @@ async function handleAdd(manager, config, args, workspaceRoot) {
439
439
  if (wasAutoConnectDisabled) reenabledParts.push("auto-connect");
440
440
  const reenabled = reenabledParts.join(" and ");
441
441
  try {
442
- await _chunkBWN2CLLMcjs.saveConfig.call(void 0, targetConfig);
442
+ await _chunkCB4E2T5Ncjs.saveConfig.call(void 0, targetConfig);
443
443
  syncRuntimeConfig(config, targetConfig);
444
444
  try {
445
445
  await manager.connect(existing);
@@ -464,7 +464,7 @@ async function handleAdd(manager, config, args, workspaceRoot) {
464
464
  }
465
465
  existing.autoConnect = true;
466
466
  try {
467
- await _chunkBWN2CLLMcjs.saveConfig.call(void 0, targetConfig);
467
+ await _chunkCB4E2T5Ncjs.saveConfig.call(void 0, targetConfig);
468
468
  syncRuntimeConfig(config, targetConfig);
469
469
  try {
470
470
  await manager.disconnect(name);
@@ -483,7 +483,7 @@ async function handleAdd(manager, config, args, workspaceRoot) {
483
483
  }
484
484
  targetConfig.mcp.servers.push(newServer);
485
485
  try {
486
- await _chunkBWN2CLLMcjs.saveConfig.call(void 0, targetConfig);
486
+ await _chunkCB4E2T5Ncjs.saveConfig.call(void 0, targetConfig);
487
487
  syncRuntimeConfig(config, targetConfig);
488
488
  try {
489
489
  await manager.connect(newServer);
@@ -540,7 +540,7 @@ async function handleRemove(manager, config, args, workspaceRoot) {
540
540
  }
541
541
  targetConfig.mcp.servers.splice(serverIndex, 1);
542
542
  try {
543
- await _chunkBWN2CLLMcjs.saveConfig.call(void 0, targetConfig);
543
+ await _chunkCB4E2T5Ncjs.saveConfig.call(void 0, targetConfig);
544
544
  syncRuntimeConfig(config, targetConfig);
545
545
  return `Removed "${serverName}" from ${scopeLabel ? `${scopeLabel} config` : "config"}`;
546
546
  } catch (error) {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  loadConfig,
3
3
  saveConfig
4
- } from "./chunk-P47WPOXN.js";
4
+ } from "./chunk-ZYVS43MU.js";
5
5
  import {
6
6
  t
7
7
  } from "./chunk-APIXPPMT.js";