autohand-cli 0.9.0 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (455) hide show
  1. package/README.md +118 -76
  2. package/dist/AgentRegistry-BBQRODQC.cjs +18 -0
  3. package/dist/AgentRegistry-JBXZUPML.js +18 -0
  4. package/dist/{CommunitySkillsCache-ZEQWP6YM.js → CommunitySkillsCache-CI7UN2DX.js} +2 -2
  5. package/dist/CommunitySkillsCache-XTQ6RMTA.cjs +8 -0
  6. package/dist/{HookManager-CWLTFKWO.js → HookManager-BELBPQQI.js} +1 -1
  7. package/dist/{HookManager-TMAJQU4S.cjs → HookManager-ZL2CLAJW.cjs} +2 -2
  8. package/dist/{ImportWizard-MQXEED2U.cjs → ImportWizard-U6CIJREW.cjs} +13 -13
  9. package/dist/{ImportWizard-QBKQEXDW.js → ImportWizard-VJFSWSUQ.js} +4 -4
  10. package/dist/LearnAdvisor-LAURA3IB.cjs +9 -0
  11. package/dist/LearnAdvisor-RFOBXFG7.js +9 -0
  12. package/dist/MemoryManager-3A2VRPF2.js +9 -0
  13. package/dist/MemoryManager-UOEQZIDC.cjs +9 -0
  14. package/dist/{NVIDIAProvider-2HR737UE.js → NVIDIAProvider-AFNJNWJM.js} +1 -1
  15. package/dist/NVIDIAProvider-L5GTYRCQ.cjs +14 -0
  16. package/dist/{PermissionManager-KMYILJ4Z.js → PermissionManager-N2LDSOYF.js} +3 -3
  17. package/dist/PermissionManager-ZNURIEYR.cjs +11 -0
  18. package/dist/ProviderFactory-3BFS65V7.cjs +13 -0
  19. package/dist/{ProviderFactory-HFPRVQ25.js → ProviderFactory-XUT6BSGB.js} +4 -2
  20. package/dist/SessionManager-LGPQIA57.cjs +10 -0
  21. package/dist/{SessionManager-PNBTJJTQ.js → SessionManager-OR4KDDDS.js} +2 -2
  22. package/dist/{SkillsRegistry-4RRD5GMX.js → SkillsRegistry-IL3GWROU.js} +2 -2
  23. package/dist/SkillsRegistry-PM34DQNA.cjs +9 -0
  24. package/dist/SubAgent-2WG4QQB5.cjs +13 -0
  25. package/dist/SubAgent-ICGN23TQ.js +13 -0
  26. package/dist/{SyncApiClient-LRPFNCKJ.js → SyncApiClient-G3FM65IV.js} +1 -1
  27. package/dist/SyncApiClient-ODBDECOG.cjs +11 -0
  28. package/dist/{about-BW3PDZUU.js → about-OYVGQMJJ.js} +5 -4
  29. package/dist/about-U2BH7HDR.cjs +15 -0
  30. package/dist/{acp-VHEL7BOW.js → acp-JWHGXZL5.js} +207 -102
  31. package/dist/{acp-EOETGAHC.cjs → acp-S37JOBCS.cjs} +226 -121
  32. package/dist/actionExecutor-2QEPMELQ.cjs +28 -0
  33. package/dist/actionExecutor-6NCCORRB.js +28 -0
  34. package/dist/add-dir-KFUHSIR2.cjs +11 -0
  35. package/dist/{add-dir-VFX7QT4E.js → add-dir-MM2BM2Z2.js} +2 -2
  36. package/dist/agent-DUIYLIVN.js +132 -0
  37. package/dist/agent-YYEHGDAK.cjs +132 -0
  38. package/dist/agents-GBGG4CW7.cjs +19 -0
  39. package/dist/agents-ZH34C72F.js +19 -0
  40. package/dist/agents-new-ERXLS7SB.cjs +17 -0
  41. package/dist/agents-new-EVTGPTA4.js +17 -0
  42. package/dist/{autoSkill-EFMK6WU6.js → autoSkill-HEWKJ5JV.js} +2 -2
  43. package/dist/autoSkill-YL6PN6AV.cjs +20 -0
  44. package/dist/automode-4BJ7FNPL.cjs +10 -0
  45. package/dist/{automode-BMYSRM34.js → automode-S4U7A7Q2.js} +2 -2
  46. package/dist/chrome-45ZXHL5N.cjs +22 -0
  47. package/dist/{chrome-NHJ44WUN.js → chrome-BBSRVG6S.js} +2 -2
  48. package/dist/chrome-IFVZRHAT.cjs +50 -0
  49. package/dist/chrome-MYE6DNA2.js +22 -0
  50. package/dist/chunk-24CEJYEG.cjs +579 -0
  51. package/dist/{chunk-47PHDKNW.cjs → chunk-255GIVM2.cjs} +6 -6
  52. package/dist/{chunk-DIZTWFVR.cjs → chunk-2BDSR2OW.cjs} +238 -61
  53. package/dist/{chunk-BL2UC7HC.js → chunk-2BPIR7LA.js} +121 -4
  54. package/dist/{chunk-BQ22N3TX.cjs → chunk-2NY7OHBF.cjs} +47 -27
  55. package/dist/chunk-2WUNHTXL.js +303 -0
  56. package/dist/{chunk-HQWQZML5.cjs → chunk-34B6ZO6W.cjs} +124 -7
  57. package/dist/{chunk-5JTTM5SC.js → chunk-3BJN7GAH.js} +1 -1
  58. package/dist/{chunk-4256YRCO.cjs → chunk-3CAXECWJ.cjs} +30 -17
  59. package/dist/{chunk-KNTUI4TZ.cjs → chunk-3CBYUBZC.cjs} +5 -5
  60. package/dist/chunk-3DF3GZQ7.js +277 -0
  61. package/dist/{chunk-E26KKI46.cjs → chunk-3JURXAL6.cjs} +61 -8
  62. package/dist/{chunk-MOJ7ADW4.cjs → chunk-3KWAP2Y3.cjs} +88 -9
  63. package/dist/{chunk-OHWMWKJQ.js → chunk-3MCK6UBL.js} +1 -1
  64. package/dist/{chunk-5VHP6HDQ.js → chunk-3TH7IK4M.js} +62 -9
  65. package/dist/{chunk-ACDQGA4Z.js → chunk-3V77OB3W.js} +7 -72
  66. package/dist/{chunk-HS4USDND.cjs → chunk-3Y5UEK7K.cjs} +4 -4
  67. package/dist/{chunk-XV2HXRHX.js → chunk-4GPPSBEZ.js} +3 -3
  68. package/dist/chunk-5CMBAJ6K.js +377 -0
  69. package/dist/{chunk-MO4KP6XS.cjs → chunk-5YRXFBYZ.cjs} +35 -6
  70. package/dist/chunk-5ZNYX4VH.cjs +71 -0
  71. package/dist/chunk-6AC2TT26.js +156 -0
  72. package/dist/{chunk-UGFVM77J.cjs → chunk-6EIQ6A6U.cjs} +2 -2
  73. package/dist/{chunk-SWCQM52V.js → chunk-6HSEDXVF.js} +4 -4
  74. package/dist/{chunk-QQ7PANOP.js → chunk-6NUXK62F.js} +1 -1
  75. package/dist/{chunk-5CMYEM3R.cjs → chunk-6TGCAPYH.cjs} +62 -9
  76. package/dist/{chunk-NMQ47RCG.js → chunk-6W3SZCSP.js} +1 -1
  77. package/dist/{chunk-VRMZO6TB.js → chunk-73LV3DDZ.js} +7 -6
  78. package/dist/{chunk-3GUEUCZK.js → chunk-7BGGLIQF.js} +85 -1
  79. package/dist/{chunk-RBHANOYY.js → chunk-7DJJGKM6.js} +47 -3
  80. package/dist/{chunk-LQBONA55.cjs → chunk-7EEK7CRR.cjs} +85 -1
  81. package/dist/chunk-7TO3PDMV.cjs +324 -0
  82. package/dist/chunk-7UU22RSH.cjs +277 -0
  83. package/dist/{chunk-E6GFD7VR.cjs → chunk-A3GAM6FM.cjs} +11 -11
  84. package/dist/{chunk-DEQVRSV5.cjs → chunk-A7DJU75T.cjs} +8 -8
  85. package/dist/{chunk-DPSIGY6L.cjs → chunk-AAAO4ERQ.cjs} +9 -9
  86. package/dist/{chunk-FQAVGSPW.js → chunk-AAJLMP57.js} +2 -2
  87. package/dist/chunk-ABR756QN.js +529 -0
  88. package/dist/{chunk-JYKPWK5O.js → chunk-APFGDIPD.js} +3 -1
  89. package/dist/{chunk-Y3M2DABP.js → chunk-APQYRMYL.js} +4 -4
  90. package/dist/{chunk-Q2IL4DDI.cjs → chunk-AZKOIF2G.cjs} +62 -19
  91. package/dist/{chunk-MXVIDIC6.cjs → chunk-AZLHUPNC.cjs} +2 -2
  92. package/dist/chunk-B55VCYSQ.cjs +30 -0
  93. package/dist/{chunk-WZV6UVPY.js → chunk-BLQUMSM3.js} +1 -1
  94. package/dist/{chunk-PHJO5YAL.cjs → chunk-BXKPX6K4.cjs} +9 -9
  95. package/dist/{chunk-3KLSNNRW.cjs → chunk-C66FN2LP.cjs} +4 -4
  96. package/dist/{chunk-OV3PVUYN.js → chunk-CH7KUFAS.js} +9 -9
  97. package/dist/{chunk-CWINVFRI.cjs → chunk-CILSXOPI.cjs} +17 -17
  98. package/dist/{chunk-3UT7R3XV.js → chunk-CM24K6ZT.js} +145 -12
  99. package/dist/chunk-CMEZ42F2.cjs +303 -0
  100. package/dist/{chunk-46C73ZKK.cjs → chunk-CNQKIWIS.cjs} +152 -19
  101. package/dist/{chunk-5JFTY3VU.js → chunk-CSTUTDTH.js} +2 -1
  102. package/dist/{chunk-REMGR23V.cjs → chunk-CSUGNNJY.cjs} +10 -4
  103. package/dist/{chunk-TBOLJDUG.js → chunk-D6HB3H3L.js} +31 -11
  104. package/dist/{chunk-OM24WXEE.js → chunk-D7AYKVKW.js} +2 -2
  105. package/dist/{chunk-6GUODJKM.cjs → chunk-DLCXWOWT.cjs} +23 -23
  106. package/dist/{chunk-CH2J4PVE.cjs → chunk-DMM2BKSV.cjs} +121 -28
  107. package/dist/{chunk-M4KNC5BQ.js → chunk-DW3DPV77.js} +1 -1
  108. package/dist/chunk-ECQD2QC3.cjs +33 -0
  109. package/dist/{chunk-UEIXJG45.js → chunk-EEYOS3UC.js} +116 -80
  110. package/dist/{chunk-7HPWMALN.js → chunk-EF2EN5CR.js} +2 -2
  111. package/dist/{chunk-7LWQCE4Y.cjs → chunk-EFXFURDY.cjs} +192 -58
  112. package/dist/chunk-EK34UZPB.cjs +40 -0
  113. package/dist/{chunk-7JLT2VNW.cjs → chunk-FJR6EZLO.cjs} +9666 -7201
  114. package/dist/{chunk-GZ6DV2UG.js → chunk-FPO7YNPQ.js} +1 -1
  115. package/dist/{chunk-O64I2GYI.js → chunk-FS4I6BNR.js} +1 -1
  116. package/dist/{chunk-MX75JYIY.js → chunk-FSJ2MNOC.js} +3 -3
  117. package/dist/{chunk-7RFJB75Y.js → chunk-GEHZMC4G.js} +11 -8
  118. package/dist/{chunk-UWFG2R2I.cjs → chunk-GO6C2RAR.cjs} +36 -9
  119. package/dist/{chunk-WGLBC5AY.cjs → chunk-GSMR6V36.cjs} +4 -4
  120. package/dist/{chunk-Z3XSSF7B.js → chunk-GSZWATME.js} +1 -1
  121. package/dist/{chunk-7MU7LWF3.cjs → chunk-GYLGCR6F.cjs} +5 -5
  122. package/dist/{chunk-O6TQP7U7.cjs → chunk-H3OOWNYQ.cjs} +3 -3
  123. package/dist/{chunk-2QL6MNXG.js → chunk-H65446XW.js} +115 -20
  124. package/dist/chunk-H7HXRRHK.js +324 -0
  125. package/dist/{chunk-ZZ63NW7A.cjs → chunk-HN2JTDN5.cjs} +17 -17
  126. package/dist/{chunk-AOKCI722.cjs → chunk-HNXUZ5OY.cjs} +2 -2
  127. package/dist/{chunk-AUYSIEVV.cjs → chunk-HOYT3E65.cjs} +3 -3
  128. package/dist/{chunk-DMRXF5DU.js → chunk-HTPY5ESD.js} +3 -3
  129. package/dist/chunk-HTU4W3GB.js +183 -0
  130. package/dist/{chunk-3DDL2E55.cjs → chunk-HVLWH2AF.cjs} +10 -10
  131. package/dist/{chunk-HSCUPEA4.cjs → chunk-HZTEU4W5.cjs} +74 -105
  132. package/dist/{chunk-XGMI6IYB.cjs → chunk-I5T7LPFP.cjs} +7 -7
  133. package/dist/{chunk-XIVFAD2L.js → chunk-IB5CJXE7.js} +173 -12
  134. package/dist/chunk-INNXFLDR.cjs +388 -0
  135. package/dist/{chunk-75EDROHL.cjs → chunk-JFLEP3T7.cjs} +10 -10
  136. package/dist/chunk-JJGDOBFL.js +40 -0
  137. package/dist/{chunk-VBOFPU5M.cjs → chunk-JM3ZTQUK.cjs} +13 -9
  138. package/dist/{chunk-HJIXWGQZ.js → chunk-JSU46T6K.js} +1 -1
  139. package/dist/{chunk-AT7OWLY5.js → chunk-K6WN6BT4.js} +1 -1
  140. package/dist/{chunk-LN7D3EJZ.js → chunk-KA2U6MY2.js} +4 -3
  141. package/dist/{chunk-3S563FNF.cjs → chunk-KIQH3SMT.cjs} +34 -31
  142. package/dist/{chunk-BWF4VDYE.js → chunk-KPRXHIE2.js} +54 -85
  143. package/dist/{chunk-Z4LIPMPM.js → chunk-L6OH44HL.js} +13 -9
  144. package/dist/{chunk-A7HHCIDQ.js → chunk-LIO3RX2Z.js} +2 -2
  145. package/dist/{chunk-DLP436GI.js → chunk-LOSXLH7P.js} +110 -17
  146. package/dist/{chunk-IEXKKKOF.cjs → chunk-LSOR72PB.cjs} +23 -23
  147. package/dist/{chunk-IAGCRVJ3.js → chunk-MA3AVDCC.js} +55 -12
  148. package/dist/{chunk-B5CGDNMR.js → chunk-ME3S2WIR.js} +3 -3
  149. package/dist/{chunk-HKYZSUQ5.js → chunk-NC2I2M4P.js} +4 -4
  150. package/dist/{chunk-GBMDFWJX.cjs → chunk-NC4A4LVC.cjs} +13 -13
  151. package/dist/{chunk-E46DJH5S.js → chunk-NGEK5FCJ.js} +176 -3
  152. package/dist/{chunk-TQ33WBY5.cjs → chunk-NHWHEW7M.cjs} +2 -1
  153. package/dist/{chunk-62RTC3XX.js → chunk-NKW6CHXQ.js} +1 -1
  154. package/dist/{chunk-3PXKRVCW.js → chunk-NOWCRKP2.js} +10 -4
  155. package/dist/{chunk-HXJEGMGB.js → chunk-NUB2LMB6.js} +2 -2
  156. package/dist/chunk-NVATU4V6.cjs +44 -0
  157. package/dist/chunk-O246MKIW.cjs +267 -0
  158. package/dist/{chunk-QCHIDZBA.js → chunk-OGFWL2PS.js} +1 -1
  159. package/dist/{chunk-JJ4KA7HK.cjs → chunk-ONNGAR6W.cjs} +415 -551
  160. package/dist/{chunk-TKKN34TV.js → chunk-OOFR6A62.js} +33 -4
  161. package/dist/{chunk-6NVAK6CK.js → chunk-OZ7FHO7J.js} +2 -2
  162. package/dist/{chunk-2CGE7ZV3.cjs → chunk-P5EWGUI2.cjs} +201 -28
  163. package/dist/{chunk-GGLKUENP.js → chunk-P6BQJPAI.js} +191 -14
  164. package/dist/{chunk-TWQDAUZU.js → chunk-PG2JIU5M.js} +60 -7
  165. package/dist/chunk-PI27G2ED.cjs +377 -0
  166. package/dist/{chunk-YV63VW4K.js → chunk-PI7LRPL6.js} +1 -1
  167. package/dist/{chunk-TXPSTCG7.cjs → chunk-PMPEC5HN.cjs} +18 -15
  168. package/dist/{chunk-ROLA6EFO.cjs → chunk-PYUP7AKY.cjs} +14 -14
  169. package/dist/{chunk-BFQDQRDE.js → chunk-QC5Z3ZT5.js} +2 -2
  170. package/dist/chunk-QDO4L2A7.cjs +156 -0
  171. package/dist/{chunk-LFDPTJYF.cjs → chunk-QDXRI5AM.cjs} +1 -1
  172. package/dist/{chunk-3LJJG5YY.cjs → chunk-QLZOMZO5.cjs} +4 -3
  173. package/dist/chunk-QVXMSQOG.js +430 -0
  174. package/dist/{chunk-ZHJ7JGME.cjs → chunk-R4UKBKDY.cjs} +11 -11
  175. package/dist/{chunk-IGMPWJ2I.cjs → chunk-R75AWII3.cjs} +118 -23
  176. package/dist/{chunk-VGEV44V2.cjs → chunk-RD5PLUIX.cjs} +191 -30
  177. package/dist/{chunk-I24CWKKK.js → chunk-RGB34CV5.js} +3 -3
  178. package/dist/{chunk-CHI52KFR.cjs → chunk-RJCZLFHE.cjs} +246 -39
  179. package/dist/{chunk-D2OSPLYC.cjs → chunk-RKWNM2BJ.cjs} +2 -2
  180. package/dist/{chunk-FGT6KK6T.js → chunk-RMVONICR.js} +3 -3
  181. package/dist/{chunk-Q6AC3PHY.cjs → chunk-RPSYRJL7.cjs} +10 -4
  182. package/dist/chunk-RS2E32YB.js +71 -0
  183. package/dist/chunk-RWKU2X7O.js +388 -0
  184. package/dist/chunk-RZLEGVMH.cjs +565 -0
  185. package/dist/{chunk-5F6ZKSHO.js → chunk-S2L3Y677.js} +1 -1
  186. package/dist/{chunk-ARBEHFCG.js → chunk-S7KVUIOS.js} +1 -1
  187. package/dist/{chunk-AC7DZ6SK.cjs → chunk-SACJJ6NO.cjs} +5 -3
  188. package/dist/{chunk-IKUMVBCW.cjs → chunk-SD3NTC7D.cjs} +48 -4
  189. package/dist/{chunk-CBFH2J3O.js → chunk-SJQU2ZFR.js} +246 -39
  190. package/dist/{chunk-GWO66KBI.js → chunk-SKAQKQFF.js} +12 -2
  191. package/dist/chunk-T4DXP5OP.js +30 -0
  192. package/dist/{chunk-CFFE4VA3.js → chunk-T6FTB6K2.js} +1 -1
  193. package/dist/{chunk-U4C3HW6P.js → chunk-T6N6GRFT.js} +13 -10
  194. package/dist/{chunk-D6GZBSOX.js → chunk-TJFKA6A7.js} +82 -3
  195. package/dist/{chunk-2HOLOHVK.js → chunk-TJZUPS4Z.js} +163 -299
  196. package/dist/{chunk-RBZ7AFX7.cjs → chunk-TLKHZ425.cjs} +2 -2
  197. package/dist/{chunk-J2K57QM7.cjs → chunk-TQ24NLXO.cjs} +6 -6
  198. package/dist/{chunk-LUMV3DB2.js → chunk-TWBAU46X.js} +1 -1
  199. package/dist/{chunk-OPNI6O7F.cjs → chunk-TZB5XADL.cjs} +4 -4
  200. package/dist/{chunk-6HH236FV.cjs → chunk-UAYXZXWU.cjs} +4 -4
  201. package/dist/{chunk-MPULXVC4.cjs → chunk-UKBFNBDO.cjs} +11 -11
  202. package/dist/chunk-UMJYX5KD.js +565 -0
  203. package/dist/chunk-USKYTHDL.cjs +235 -0
  204. package/dist/chunk-V4HGZSKQ.cjs +183 -0
  205. package/dist/{chunk-MQESBFBZ.cjs → chunk-VAJUSZMC.cjs} +21 -20
  206. package/dist/{chunk-PQLKJCIE.js → chunk-VGQG4NBJ.js} +2 -2
  207. package/dist/chunk-VLUIVJ3J.js +235 -0
  208. package/dist/chunk-VOBINVMV.cjs +430 -0
  209. package/dist/{chunk-L4F7SUYL.js → chunk-VSHKKCSH.js} +16 -5
  210. package/dist/{chunk-LDJQ5QHG.cjs → chunk-VSZU3MGA.cjs} +28 -17
  211. package/dist/{chunk-YFXTE422.cjs → chunk-VWHAUB77.cjs} +8 -3
  212. package/dist/{chunk-EZJHLOWP.js → chunk-VXGYFX45.js} +20 -7
  213. package/dist/{chunk-JIMSII7R.js → chunk-WH6YUQDB.js} +193 -59
  214. package/dist/{chunk-VKBIE6I6.js → chunk-WQ6TD55V.js} +2 -2
  215. package/dist/{chunk-ZR46OJNZ.js → chunk-WQWECXTY.js} +3 -3
  216. package/dist/{chunk-SOLBYSLY.cjs → chunk-WVDJUJH6.cjs} +2 -2
  217. package/dist/{chunk-QKP772OZ.js → chunk-X24VIVDZ.js} +963 -103
  218. package/dist/{chunk-37M5UM6I.js → chunk-X4NRTLXD.js} +7 -1
  219. package/dist/chunk-X53SHYCG.js +27 -0
  220. package/dist/{chunk-PUD76XQT.cjs → chunk-XB2Z4ZAK.cjs} +5 -5
  221. package/dist/chunk-Y47OJGLB.cjs +27 -0
  222. package/dist/{chunk-WRTXCQ3V.cjs → chunk-Y4MN27V3.cjs} +1080 -220
  223. package/dist/{chunk-ZK6HOR62.js → chunk-YEHFYZFU.js} +7 -2
  224. package/dist/{chunk-FFBDRUO5.cjs → chunk-YICIUY23.cjs} +1 -1
  225. package/dist/{chunk-PDHT7LQS.cjs → chunk-YMXYC777.cjs} +3 -3
  226. package/dist/{chunk-TJNBASFD.cjs → chunk-Z3GRWK6O.cjs} +8 -8
  227. package/dist/{chunk-JP3YHTQ2.cjs → chunk-Z5GG2KSL.cjs} +4 -4
  228. package/dist/{chunk-ZPD2AO3U.js → chunk-ZER7DYQK.js} +2 -2
  229. package/dist/{chunk-UXLW45ZE.cjs → chunk-ZFDXZEZJ.cjs} +25 -90
  230. package/dist/chunk-ZFV4HJA6.js +579 -0
  231. package/dist/chunk-ZHMYTI5D.cjs +529 -0
  232. package/dist/{chunk-CCVMREXI.js → chunk-ZLR2TFBC.js} +35 -8
  233. package/dist/{chunk-J5ADZN6V.cjs → chunk-ZTWNU5QZ.cjs} +20 -20
  234. package/dist/chunk-ZUYYHKQA.js +44 -0
  235. package/dist/{chunk-AUFNACED.js → chunk-ZVLVLDYN.js} +9086 -6621
  236. package/dist/clear-AJGXD2BB.cjs +12 -0
  237. package/dist/{clear-OFLFQ3MR.js → clear-HAHDSWKW.js} +3 -3
  238. package/dist/communityInstaller-IRR6M3N6.cjs +22 -0
  239. package/dist/{communityInstaller-COB2KTOW.js → communityInstaller-OLKEUGMX.js} +6 -6
  240. package/dist/completion-G7Z436TF.cjs +17 -0
  241. package/dist/{completion-PT4VM2H2.js → completion-ZS3AXJ6A.js} +5 -5
  242. package/dist/{config-R4O7GBTY.js → config-OWYAQPCX.js} +5 -3
  243. package/dist/config-W2BHT2QE.cjs +22 -0
  244. package/dist/{constants-HVCHVQAF.js → constants-AS6K67AA.js} +5 -3
  245. package/dist/constants-B4W5BT7F.cjs +23 -0
  246. package/dist/{export-3PK3VFCE.js → export-5HIU3KMD.js} +5 -5
  247. package/dist/export-GFD32UY2.cjs +15 -0
  248. package/dist/{extractSessionMemories-A2JX5WJ2.js → extractSessionMemories-K6ZVAW2F.js} +1 -1
  249. package/dist/{extractSessionMemories-XL3MS37F.cjs → extractSessionMemories-LLOIJR5U.cjs} +2 -2
  250. package/dist/feature-KP74CZ3F.cjs +14 -0
  251. package/dist/feature-OPNVMB2E.js +14 -0
  252. package/dist/features-LT55MURX.cjs +24 -0
  253. package/dist/features-ZDIU26WX.js +24 -0
  254. package/dist/feedback-7WTJFQ6S.js +18 -0
  255. package/dist/feedback-CEOJ3453.cjs +18 -0
  256. package/dist/go-2CY5SZNR.js +16 -0
  257. package/dist/go-O2CSQON4.cjs +16 -0
  258. package/dist/goal-DL2N2AWT.cjs +16 -0
  259. package/dist/goal-IJS7VZSG.js +16 -0
  260. package/dist/help-RNOGDEBA.cjs +12 -0
  261. package/dist/{help-X3OAZ3CY.js → help-TCWD2IRH.js} +2 -2
  262. package/dist/{history-YKFPHBJN.js → history-ATOR5OQV.js} +2 -2
  263. package/dist/history-UUSGX2AL.cjs +14 -0
  264. package/dist/{hooks-7TA4PIIB.js → hooks-R3Z5QKUP.js} +6 -6
  265. package/dist/hooks-RWM5UY67.cjs +18 -0
  266. package/dist/{i18n-2KBUU7XL.js → i18n-4QI4TD4I.js} +1 -1
  267. package/dist/i18n-MFAEU5RV.cjs +33 -0
  268. package/dist/ide-6PBTCCUQ.js +15 -0
  269. package/dist/ide-UE3G7NMQ.cjs +15 -0
  270. package/dist/{import-I7T4ZHYL.cjs → import-2IG76KAN.cjs} +6 -4
  271. package/dist/{import-JWPYKXCZ.js → import-E47QL4DW.js} +2 -2
  272. package/dist/import-NQDNBFUL.cjs +10 -0
  273. package/dist/{import-4CHYLS4K.js → import-VQIHGJWS.js} +6 -4
  274. package/dist/index.cjs +512 -305
  275. package/dist/index.d.cts +40 -0
  276. package/dist/index.d.ts +40 -0
  277. package/dist/index.js +402 -195
  278. package/dist/init-DX3RDGDT.cjs +10 -0
  279. package/dist/{init-262MWZV4.js → init-Q54OAAFZ.js} +2 -2
  280. package/dist/{inputPrompt-YGBHDUEP.js → inputPrompt-V2VBDRM7.js} +3 -3
  281. package/dist/inputPrompt-WVGVWAHS.cjs +90 -0
  282. package/dist/language-I6KXAOXD.js +23 -0
  283. package/dist/language-XMIVOH5E.cjs +23 -0
  284. package/dist/learn-JPVVGTKU.js +23 -0
  285. package/dist/learn-NLSHI2MZ.cjs +23 -0
  286. package/dist/login-NABQYLYC.cjs +28 -0
  287. package/dist/login-XPOVFSWN.js +28 -0
  288. package/dist/logout-HNHCGB4Q.js +25 -0
  289. package/dist/logout-SKGDXJSW.cjs +25 -0
  290. package/dist/{mcp-5O6PUL4G.js → mcp-EN73YFGZ.js} +8 -6
  291. package/dist/mcp-TADZCPJQ.cjs +22 -0
  292. package/dist/{mcp-install-P6DHES7V.cjs → mcp-install-2GKWWBAS.cjs} +15 -13
  293. package/dist/{mcp-install-6XWXLFVY.js → mcp-install-3TBTVSHW.js} +10 -8
  294. package/dist/memory-GRXFTDIN.cjs +10 -0
  295. package/dist/{memory-Q54CESNM.js → memory-K2P3CDCH.js} +2 -2
  296. package/dist/{model-6AJ77PJG.js → model-DEG22OWA.js} +2 -2
  297. package/dist/model-OSD74T7Z.cjs +10 -0
  298. package/dist/new-4NWBOATU.cjs +12 -0
  299. package/dist/{new-ZXHEWC2S.js → new-KJAP2MB6.js} +3 -3
  300. package/dist/onboarding-2U5WE2OA.js +39 -0
  301. package/dist/onboarding-5DZFCO5Q.cjs +39 -0
  302. package/dist/permissions-KY5I6YQ3.cjs +10 -0
  303. package/dist/{permissions-YHJMVA6L.js → permissions-TKYON7PP.js} +2 -2
  304. package/dist/{plan-YYUAXPTL.js → plan-DYHHLZSS.js} +1 -1
  305. package/dist/plan-PYKP652W.cjs +13 -0
  306. package/dist/quit-GSKJL42O.js +14 -0
  307. package/dist/quit-TQSRTBUT.cjs +14 -0
  308. package/dist/{registry-34GL6BNJ.js → registry-EZ4V4TUQ.js} +1339 -1
  309. package/dist/{registry-V24W7YK6.cjs → registry-LCWYI4IB.cjs} +1378 -40
  310. package/dist/resume-4VWJXARX.cjs +17 -0
  311. package/dist/resume-TLHWWWFN.js +17 -0
  312. package/dist/{review-QHP2KP4Q.js → review-CSK4IYTO.js} +1 -1
  313. package/dist/review-XLJEUH5K.cjs +9 -0
  314. package/dist/{rpc-S3DGW6KV.js → rpc-3DLQBDWU.js} +301 -130
  315. package/dist/{rpc-NPS3PU4O.cjs → rpc-O36WUU3L.cjs} +399 -228
  316. package/dist/search-DSX2CY4A.cjs +22 -0
  317. package/dist/search-I3QUDUQL.js +22 -0
  318. package/dist/sessionBranching-DVNOUWJT.cjs +19 -0
  319. package/dist/sessionBranching-FKV4CR36.js +19 -0
  320. package/dist/sessions-3JUOT3ED.cjs +10 -0
  321. package/dist/{sessions-IYAXMK23.js → sessions-VWMDIPOS.js} +2 -2
  322. package/dist/settings-FT2LZZUV.js +45 -0
  323. package/dist/settings-RL4KNWHB.cjs +45 -0
  324. package/dist/setup-HQEJVOYT.js +32 -0
  325. package/dist/setup-MN54LKOL.cjs +32 -0
  326. package/dist/share-BUAFZNBX.cjs +17 -0
  327. package/dist/share-CGB6MAVJ.js +17 -0
  328. package/dist/skills/builtin/code-reviewer/SKILL.md +64 -0
  329. package/dist/skills/builtin/goal-writer/SKILL.md +124 -0
  330. package/dist/{skills-VWOMV3CR.js → skills-7DKR3HRZ.js} +8 -8
  331. package/dist/{skills-MVIZNHT4.js → skills-BBBENOEY.js} +9 -9
  332. package/dist/skills-OQM7IHAF.cjs +29 -0
  333. package/dist/{skills-GGMZOVIE.cjs → skills-RA2PKL63.cjs} +10 -10
  334. package/dist/{skills-install-VTAMCNNY.cjs → skills-install-D7K476SL.cjs} +16 -16
  335. package/dist/{skills-install-QBA5RCV6.js → skills-install-T4SOKJSL.js} +9 -9
  336. package/dist/skills-new-S33NGEU3.js +18 -0
  337. package/dist/skills-new-UVYH53MD.cjs +18 -0
  338. package/dist/slashCommands-MWOUDSQP.js +111 -0
  339. package/dist/slashCommands-XASURUTV.cjs +111 -0
  340. package/dist/squad-PIIYDFVH.cjs +15 -0
  341. package/dist/squad-VHYOVEJP.js +15 -0
  342. package/dist/status-GHFTXQBL.js +25 -0
  343. package/dist/status-WXMIJIU3.cjs +25 -0
  344. package/dist/statusline-2K7AC6ZQ.js +21 -0
  345. package/dist/statusline-GROI4HOC.cjs +21 -0
  346. package/dist/sync-254WF6JI.cjs +42 -0
  347. package/dist/sync-2DIZN4EH.cjs +24 -0
  348. package/dist/{sync-7BILIQHP.js → sync-J6I2ZUKQ.js} +6 -4
  349. package/dist/{sync-7OKF6636.js → sync-Z3LVSEEV.js} +8 -5
  350. package/dist/{teammate-J6PHGL23.cjs → teammate-EXR76PEQ.cjs} +9 -8
  351. package/dist/{teammate-GZQSCIMS.js → teammate-K4DAOFEQ.js} +8 -7
  352. package/dist/templates-ARG2VRWW.cjs +11 -0
  353. package/dist/templates-UGVZV3KJ.js +11 -0
  354. package/dist/theme-MVQDSU47.js +23 -0
  355. package/dist/theme-QAKEYWJG.cjs +23 -0
  356. package/dist/ui/questionModal.cjs +6 -6
  357. package/dist/ui/questionModal.js +5 -5
  358. package/dist/{undo-SZEHLX7X.js → undo-5AU47JHF.js} +2 -2
  359. package/dist/undo-ME6WKUXZ.cjs +10 -0
  360. package/dist/usage-QTKO2YMD.js +25 -0
  361. package/dist/usage-TYNJKVER.cjs +25 -0
  362. package/package.json +10 -4
  363. package/dist/AgentRegistry-EGBDIUAK.cjs +0 -10
  364. package/dist/AgentRegistry-XPWSVO3Q.js +0 -10
  365. package/dist/CommunitySkillsCache-2OIUV227.cjs +0 -8
  366. package/dist/LearnAdvisor-46FG2XIP.js +0 -9
  367. package/dist/LearnAdvisor-XBRDNAGH.cjs +0 -9
  368. package/dist/MemoryManager-34L4YOKA.cjs +0 -8
  369. package/dist/MemoryManager-WJMLPWGU.js +0 -8
  370. package/dist/NVIDIAProvider-MVTL62PR.cjs +0 -14
  371. package/dist/PermissionManager-5OOJ7FAT.cjs +0 -11
  372. package/dist/ProviderFactory-C3YPXTDD.cjs +0 -11
  373. package/dist/SessionManager-WAPTFMDO.cjs +0 -10
  374. package/dist/SkillsRegistry-7AJP74GJ.cjs +0 -9
  375. package/dist/SubAgent-FDIH3DXB.js +0 -11
  376. package/dist/SubAgent-HVL2ICVZ.cjs +0 -11
  377. package/dist/SyncApiClient-VMBOLQ6H.cjs +0 -11
  378. package/dist/about-FCAX37YC.cjs +0 -14
  379. package/dist/actionExecutor-33I47NZS.js +0 -24
  380. package/dist/actionExecutor-4YBMR3YH.cjs +0 -24
  381. package/dist/add-dir-7SS6KSH5.cjs +0 -11
  382. package/dist/agent-DMRUFU4M.cjs +0 -116
  383. package/dist/agent-WCJEYQJT.js +0 -116
  384. package/dist/agents-CHROO3VU.cjs +0 -17
  385. package/dist/agents-UVDUL65K.js +0 -17
  386. package/dist/agents-new-AUBWSOXP.js +0 -17
  387. package/dist/agents-new-Y562WC47.cjs +0 -17
  388. package/dist/autoSkill-YOLLFTP2.cjs +0 -20
  389. package/dist/automode-DBLKTTKD.cjs +0 -10
  390. package/dist/chrome-ATC4OO5I.cjs +0 -20
  391. package/dist/chrome-O62WXV7F.js +0 -20
  392. package/dist/chrome-XHJLCO4M.cjs +0 -50
  393. package/dist/chunk-6XVVIY54.cjs +0 -256
  394. package/dist/chunk-AU6JAGZJ.cjs +0 -231
  395. package/dist/chunk-N6O3XUZ2.cjs +0 -23
  396. package/dist/chunk-VDWJMWDF.js +0 -256
  397. package/dist/clear-33TWQ2ES.cjs +0 -12
  398. package/dist/communityInstaller-TWMGPSYM.cjs +0 -22
  399. package/dist/completion-IIZMHXYP.cjs +0 -17
  400. package/dist/config-KL6WU7R2.cjs +0 -20
  401. package/dist/constants-RLMJ5D5P.cjs +0 -21
  402. package/dist/export-WLGNWEMJ.cjs +0 -15
  403. package/dist/feedback-G635NCLJ.js +0 -18
  404. package/dist/feedback-LLMK3TZH.cjs +0 -18
  405. package/dist/help-BAXLP2M2.cjs +0 -12
  406. package/dist/history-6HOJSEMT.cjs +0 -14
  407. package/dist/hooks-XVFU67T2.cjs +0 -18
  408. package/dist/i18n-MUJMKTFM.cjs +0 -33
  409. package/dist/ide-CCQ33PGC.cjs +0 -15
  410. package/dist/ide-VLVFBZ5F.js +0 -15
  411. package/dist/import-J46F54JY.cjs +0 -10
  412. package/dist/init-EE5Y7RBL.cjs +0 -10
  413. package/dist/inputPrompt-IIFKCX5Q.cjs +0 -90
  414. package/dist/language-CVLPB7OV.js +0 -21
  415. package/dist/language-ZTWFHUSV.cjs +0 -21
  416. package/dist/learn-PON7I5QS.js +0 -23
  417. package/dist/learn-XLRSVNA3.cjs +0 -23
  418. package/dist/login-223QTGBG.cjs +0 -26
  419. package/dist/login-6IKTBUBY.js +0 -26
  420. package/dist/logout-RN2AG6SI.js +0 -23
  421. package/dist/logout-U3M4FFX7.cjs +0 -23
  422. package/dist/mcp-NUQ76QQB.cjs +0 -20
  423. package/dist/memory-CYMDQ2YC.cjs +0 -10
  424. package/dist/model-IDRCKDML.cjs +0 -10
  425. package/dist/new-7LEWOUF2.cjs +0 -12
  426. package/dist/onboarding-FXX7YHSJ.cjs +0 -35
  427. package/dist/onboarding-JYNMK6NI.js +0 -35
  428. package/dist/permissions-YBNSANIA.cjs +0 -10
  429. package/dist/plan-XEJMOT55.cjs +0 -13
  430. package/dist/quit-B43SJ6E4.cjs +0 -10
  431. package/dist/quit-GWTNHQSP.js +0 -10
  432. package/dist/resume-DYVOQN5L.cjs +0 -16
  433. package/dist/resume-M25UQKOX.js +0 -16
  434. package/dist/review-UWHWQHCB.cjs +0 -9
  435. package/dist/search-CPX4PWHP.js +0 -20
  436. package/dist/search-VUF3M4N3.cjs +0 -20
  437. package/dist/sessions-JODKER5D.cjs +0 -10
  438. package/dist/settings-55BNW6BF.js +0 -33
  439. package/dist/settings-BKTS7OMC.cjs +0 -33
  440. package/dist/setup-IRC5HQG2.js +0 -29
  441. package/dist/setup-MMQ7TWOP.cjs +0 -29
  442. package/dist/share-6JRQECAH.cjs +0 -17
  443. package/dist/share-YM5MJKMO.js +0 -17
  444. package/dist/skills-LWSOKOSH.cjs +0 -29
  445. package/dist/skills-new-GPL46YV2.js +0 -18
  446. package/dist/skills-new-L5BEZN5V.cjs +0 -18
  447. package/dist/slashCommands-FBPCIWM5.cjs +0 -95
  448. package/dist/slashCommands-FCWY5DXW.js +0 -95
  449. package/dist/status-3B5SDZPL.js +0 -17
  450. package/dist/status-TTGRF6NC.cjs +0 -17
  451. package/dist/sync-77CXVVTK.cjs +0 -21
  452. package/dist/sync-EH4K5U3N.cjs +0 -40
  453. package/dist/theme-64BYGJ57.cjs +0 -21
  454. package/dist/theme-YJE6HEON.js +0 -21
  455. package/dist/undo-PRTEGL2J.cjs +0 -10
@@ -0,0 +1,565 @@
1
+ import {
2
+ listGoalTemplateMetadata,
3
+ resolveGoalTemplateByName,
4
+ resolveGoalTemplateInvocation
5
+ } from "./chunk-HTU4W3GB.js";
6
+ import {
7
+ PROJECT_DIR_NAME
8
+ } from "./chunk-PG2JIU5M.js";
9
+
10
+ // src/goals/GoalManager.ts
11
+ import crypto from "crypto";
12
+ import fs from "fs-extra";
13
+ import path from "path";
14
+
15
+ // src/goals/queueBlockParser.ts
16
+ function parseQueueBlockItems(input) {
17
+ const lines = input.split(/\r?\n/);
18
+ const items = [];
19
+ for (let i = 0; i < lines.length; i++) {
20
+ const trimmed = lines[i].trim();
21
+ const bracket = trimmed.match(/^\[(\d+)\]\s+(.+)$/);
22
+ const numbered = trimmed.match(/^(\d+)[.)]\s+(.+)$/);
23
+ const match = bracket ?? numbered;
24
+ if (!match) continue;
25
+ items.push({
26
+ marker: match[1],
27
+ objectiveInput: match[2].trim(),
28
+ lineIndex: i
29
+ });
30
+ }
31
+ return items.length > 1 ? items : null;
32
+ }
33
+
34
+ // src/goals/GoalManager.ts
35
+ var GOAL_STATE_FILE = "goals.local.json";
36
+ var MAX_OBJECTIVE_LENGTH = 8e4;
37
+ var GoalManager = class {
38
+ constructor(workspaceRoot) {
39
+ this.workspaceRoot = workspaceRoot;
40
+ }
41
+ workspaceRoot;
42
+ async getSnapshot() {
43
+ const snapshot = await this.readSnapshot();
44
+ const goal = snapshot.goal ? this.withLiveElapsed(snapshot.goal) : null;
45
+ return { ...snapshot, goal };
46
+ }
47
+ async listTemplates() {
48
+ return listGoalTemplateMetadata(this.workspaceRoot);
49
+ }
50
+ async resolveObjective(input) {
51
+ const resolution = await resolveGoalTemplateInvocation(input, this.workspaceRoot);
52
+ if (resolution.ok) {
53
+ return {
54
+ ok: true,
55
+ input: { objective: resolution.template.objective },
56
+ template: resolution.template.name,
57
+ templateFlags: resolution.template.flags,
58
+ templateArgs: resolution.template.args
59
+ };
60
+ }
61
+ if ("notTemplate" in resolution) return { ok: true, input: { objective: input } };
62
+ return { ok: false, message: resolution.error };
63
+ }
64
+ async createGoal(input, opts = {}) {
65
+ const snapshot = await this.readSnapshot();
66
+ const validation = validateGoalInput(input);
67
+ if (validation) return result(snapshot, false, validation);
68
+ if (snapshot.goal && snapshot.goal.status !== "complete" && !opts.replace) {
69
+ return result(snapshot, false, "A goal already exists. Clear it, complete it, or queue the new objective before replacing it.");
70
+ }
71
+ const now = Date.now();
72
+ const goal = {
73
+ goalId: crypto.randomUUID(),
74
+ objective: input.objective.trim(),
75
+ status: "active",
76
+ tokenBudget: input.tokenBudget,
77
+ timeBudgetSeconds: input.timeBudgetSeconds,
78
+ minTokensBeforeWrapUp: input.minTokensBeforeWrapUp,
79
+ minTimeSecondsBeforeWrapUp: input.minTimeSecondsBeforeWrapUp,
80
+ tokensUsed: 0,
81
+ timeUsedSeconds: 0,
82
+ createdAt: now,
83
+ updatedAt: now
84
+ };
85
+ const next = { ...snapshot, goal, updatedAt: now };
86
+ await this.writeSnapshot(next);
87
+ return result(next, true, snapshot.goal?.status === "complete" ? "Goal created; replaced completed goal." : "Goal created.");
88
+ }
89
+ async createOrQueueGoal(input) {
90
+ const snapshot = await this.readSnapshot();
91
+ const current = snapshot.goal ? this.withLiveElapsed(snapshot.goal) : null;
92
+ if (current && current.status !== "complete" && current.status !== "budgetLimited") {
93
+ return this.enqueueGoal(input);
94
+ }
95
+ return this.createGoal(input);
96
+ }
97
+ async updateGoal(input) {
98
+ const snapshot = await this.readSnapshot();
99
+ const current = snapshot.goal ? this.withLiveElapsed(snapshot.goal) : null;
100
+ if (!current) return result(snapshot, false, "No goal exists to update.");
101
+ let next = { ...current };
102
+ const changes = [];
103
+ if (input.objective !== void 0) {
104
+ const objective = input.objective.trim();
105
+ if (!objective) return result(snapshot, false, "objective must be non-empty.");
106
+ if (objective.length > MAX_OBJECTIVE_LENGTH) return result(snapshot, false, `objective is too long (max ${MAX_OBJECTIVE_LENGTH} characters).`);
107
+ next = { ...next, objective };
108
+ changes.push("objective");
109
+ }
110
+ const budgetError = applyOptionalPositiveInteger(input.tokenBudget, (value) => {
111
+ next = { ...next, tokenBudget: value };
112
+ changes.push("token budget");
113
+ });
114
+ if (budgetError) return result(snapshot, false, budgetError);
115
+ const timeBudgetError = applyOptionalPositiveInteger(input.timeBudgetSeconds, (value) => {
116
+ next = { ...next, timeBudgetSeconds: value };
117
+ changes.push("time budget");
118
+ });
119
+ if (timeBudgetError) return result(snapshot, false, timeBudgetError);
120
+ const minTokensError = applyOptionalPositiveInteger(input.minTokensBeforeWrapUp, (value) => {
121
+ next = { ...next, minTokensBeforeWrapUp: value };
122
+ changes.push("token floor");
123
+ });
124
+ if (minTokensError) return result(snapshot, false, minTokensError);
125
+ const minTimeError = applyOptionalPositiveInteger(input.minTimeSecondsBeforeWrapUp, (value) => {
126
+ next = { ...next, minTimeSecondsBeforeWrapUp: value };
127
+ changes.push("time floor");
128
+ });
129
+ if (minTimeError) return result(snapshot, false, minTimeError);
130
+ const floorError = validateFloors(next);
131
+ if (floorError) return result(snapshot, false, floorError);
132
+ if (input.status !== void 0) {
133
+ if (!["active", "paused", "complete", "budgetLimited"].includes(input.status)) {
134
+ return result(snapshot, false, "status must be active, paused, complete, or budgetLimited.");
135
+ }
136
+ if (input.status === "complete" && !floorMet(next)) {
137
+ return result(snapshot, false, "Completion floor is not met yet. Keep working, raise the floor, or clear the goal if the user explicitly wants to stop.");
138
+ }
139
+ next = transitionStatus(next, input.status);
140
+ changes.push(`status ${input.status}`);
141
+ }
142
+ if (next.status === "active" && budgetLimitReason(next)) {
143
+ return result(snapshot, false, "Cannot resume: budget is exhausted. Raise the budget or clear the goal before resuming.");
144
+ }
145
+ if (changes.length === 0) return result(snapshot, false, "No goal updates were provided.");
146
+ if (next.status === "complete") {
147
+ if (current.status === "complete") return result({ ...snapshot, goal: current }, false, "Goal is already complete.");
148
+ const completedGoal = buildCompletedGoal(next, Date.now());
149
+ const completedRun = appendCompletedGoal(snapshot.completed, completedGoal);
150
+ const nextQueued = snapshot.queue[0];
151
+ if (nextQueued) {
152
+ const started = await this.startQueuedGoalFromSnapshot({
153
+ ...snapshot,
154
+ goal: next,
155
+ completed: completedRun
156
+ }, nextQueued);
157
+ if (!started.ok) return started;
158
+ return {
159
+ ...started,
160
+ message: "Goal completed. Started next queued goal.",
161
+ completed: completedGoal,
162
+ completedRun
163
+ };
164
+ }
165
+ next = { ...next, updatedAt: Date.now() };
166
+ const updated2 = {
167
+ ...snapshot,
168
+ goal: next,
169
+ completed: completedRun,
170
+ updatedAt: next.updatedAt
171
+ };
172
+ await this.writeSnapshot(updated2);
173
+ return result(updated2, true, formatAllCompleteMessage(completedRun), {
174
+ completed: completedGoal,
175
+ completedRun
176
+ });
177
+ }
178
+ next = { ...next, updatedAt: Date.now() };
179
+ const updated = { ...snapshot, goal: next, updatedAt: next.updatedAt };
180
+ await this.writeSnapshot(updated);
181
+ return result(updated, true, `Goal updated: ${changes.join(", ")}.`);
182
+ }
183
+ async clearGoal() {
184
+ const snapshot = await this.readSnapshot();
185
+ const next = { ...snapshot, goal: null, updatedAt: Date.now() };
186
+ await this.writeSnapshot(next);
187
+ return result(next, true, snapshot.goal ? "Goal cleared." : "No goal was set.");
188
+ }
189
+ async enqueueGoal(input) {
190
+ const snapshot = await this.readSnapshot();
191
+ const validation = validateGoalInput(input);
192
+ if (validation) return result(snapshot, false, validation);
193
+ const queued = buildQueuedGoal(input);
194
+ const next = { ...snapshot, queue: [...snapshot.queue, queued], updatedAt: Date.now() };
195
+ await this.writeSnapshot(next);
196
+ return { ...result(next, true, "Queued goal."), queued: [queued] };
197
+ }
198
+ async enqueueGoalBlock(input, source) {
199
+ const snapshot = await this.readSnapshot();
200
+ const items = parseQueueBlockItems(input);
201
+ if (!items) return this.enqueueResolvedGoalInput(input, source);
202
+ const queued = [];
203
+ for (const item of items) {
204
+ const resolved = await this.resolveObjective(item.objectiveInput);
205
+ if (!resolved.ok) return result(snapshot, false, `Queue item ${item.marker} could not be resolved: ${resolved.message}`);
206
+ const validation = validateGoalInput(resolved.input);
207
+ if (validation) return result(snapshot, false, `Queue item ${item.marker}: ${validation}`);
208
+ queued.push(buildQueuedGoal({
209
+ ...resolved.input,
210
+ source,
211
+ template: resolved.template,
212
+ templateFlags: resolved.templateFlags,
213
+ templateArgs: resolved.templateArgs
214
+ }));
215
+ }
216
+ const next = { ...snapshot, queue: [...snapshot.queue, ...queued], updatedAt: Date.now() };
217
+ await this.writeSnapshot(next);
218
+ return { ...result(next, true, `Queued ${queued.length} goals.`), queued };
219
+ }
220
+ async enqueueResolvedGoalInput(input, source) {
221
+ const resolved = await this.resolveObjective(input);
222
+ if (!resolved.ok) {
223
+ const snapshot = await this.readSnapshot();
224
+ return result(snapshot, false, resolved.message);
225
+ }
226
+ return this.enqueueGoal({
227
+ ...resolved.input,
228
+ source,
229
+ template: resolved.template,
230
+ templateFlags: resolved.templateFlags,
231
+ templateArgs: resolved.templateArgs
232
+ });
233
+ }
234
+ async startQueuedGoal() {
235
+ const snapshot = await this.readSnapshot();
236
+ const current = snapshot.goal ? this.withLiveElapsed(snapshot.goal) : null;
237
+ if (current && current.status !== "complete" && current.status !== "budgetLimited") {
238
+ return result({ ...snapshot, goal: current }, false, "A non-terminal goal is already active. The queued goal was left in the queue.");
239
+ }
240
+ const nextQueued = snapshot.queue[0];
241
+ if (!nextQueued) return result({ ...snapshot, goal: current }, false, "No queued goals.");
242
+ const snapshotWithTerminalHistory = current && (current.status === "complete" || current.status === "budgetLimited") ? {
243
+ ...snapshot,
244
+ goal: current,
245
+ completed: appendCompletedGoal(snapshot.completed, buildCompletedGoal(current, Date.now()))
246
+ } : { ...snapshot, goal: current };
247
+ return this.startQueuedGoalFromSnapshot(snapshotWithTerminalHistory, nextQueued);
248
+ }
249
+ async startQueuedGoalFromSnapshot(snapshot, nextQueued) {
250
+ let objective = nextQueued.objective;
251
+ if (nextQueued.template) {
252
+ const resolved = await resolveGoalTemplateByName(this.workspaceRoot, nextQueued.template, nextQueued.templateFlags ?? {}, nextQueued.templateArgs ?? "");
253
+ if (!resolved.ok) return result(snapshot, false, "notTemplate" in resolved ? `Unknown goal template '${nextQueued.template}'.` : resolved.error);
254
+ objective = resolved.template.objective;
255
+ }
256
+ const now = Date.now();
257
+ const goal = {
258
+ goalId: crypto.randomUUID(),
259
+ objective,
260
+ status: "active",
261
+ tokenBudget: nextQueued.tokenBudget,
262
+ timeBudgetSeconds: nextQueued.timeBudgetSeconds,
263
+ minTokensBeforeWrapUp: nextQueued.minTokensBeforeWrapUp,
264
+ minTimeSecondsBeforeWrapUp: nextQueued.minTimeSecondsBeforeWrapUp,
265
+ tokensUsed: 0,
266
+ timeUsedSeconds: 0,
267
+ createdAt: now,
268
+ updatedAt: now
269
+ };
270
+ const updated = { ...snapshot, goal, queue: snapshot.queue.slice(1), updatedAt: now };
271
+ await this.writeSnapshot(updated);
272
+ return { ...result(updated, true, "Started queued goal."), started: nextQueued, dequeued: nextQueued };
273
+ }
274
+ async dequeueGoal(audit) {
275
+ const snapshot = await this.readSnapshot();
276
+ if (!audit?.rationale?.trim() || !audit.authority?.trim()) {
277
+ return result(snapshot, false, "rationale and authority are required to dequeue a queued goal.");
278
+ }
279
+ const dequeued = snapshot.queue[0];
280
+ if (!dequeued) return result(snapshot, false, "No queued goals.");
281
+ const next = { ...snapshot, queue: snapshot.queue.slice(1), updatedAt: Date.now() };
282
+ await this.writeSnapshot(next);
283
+ return { ...result(next, true, "Dequeued goal."), dequeued };
284
+ }
285
+ async removeQueuedGoal(queueId) {
286
+ const snapshot = await this.readSnapshot();
287
+ const removed = snapshot.queue.find((item) => item.queueId === queueId);
288
+ if (!removed) return result(snapshot, false, `No queued goal found with id ${queueId}.`);
289
+ const next = { ...snapshot, queue: snapshot.queue.filter((item) => item.queueId !== queueId), updatedAt: Date.now() };
290
+ await this.writeSnapshot(next);
291
+ return { ...result(next, true, "Removed queued goal."), removed };
292
+ }
293
+ async recordTurnUsage(input) {
294
+ const snapshot = await this.readSnapshot();
295
+ if (!snapshot.goal) return result(snapshot, true, "No active goal.");
296
+ let goal = this.withLiveElapsed(snapshot.goal);
297
+ goal = {
298
+ ...goal,
299
+ tokensUsed: goal.tokensUsed + Math.max(0, Math.floor(input.tokensUsed ?? 0)),
300
+ updatedAt: Date.now()
301
+ };
302
+ const limitReason = budgetLimitReason(goal);
303
+ if (limitReason) {
304
+ goal = transitionStatus(goal, "budgetLimited");
305
+ }
306
+ const next = { ...snapshot, goal, updatedAt: goal.updatedAt };
307
+ await this.writeSnapshot(next);
308
+ return result(next, true, limitReason ? `Goal budget limited: ${limitReason}.` : "Goal usage recorded.");
309
+ }
310
+ formatSnapshot(snapshot) {
311
+ const lines = [];
312
+ if (!snapshot.goal) {
313
+ lines.push("No goal is currently set.");
314
+ } else {
315
+ const goal = snapshot.goal;
316
+ lines.push(`Goal ${goal.goalId}`);
317
+ lines.push(`Status: ${goal.status}`);
318
+ lines.push(`Objective: ${goal.objective}`);
319
+ lines.push(`Elapsed: ${formatDuration(goal.timeUsedSeconds)}`);
320
+ lines.push(`Tokens: ${goal.tokensUsed}${goal.tokenBudget ? ` / ${goal.tokenBudget}` : ""}`);
321
+ if (goal.timeBudgetSeconds) lines.push(`Time budget: ${formatDuration(goal.timeBudgetSeconds)}`);
322
+ if (goal.minTokensBeforeWrapUp) lines.push(`Token floor: ${goal.minTokensBeforeWrapUp}`);
323
+ if (goal.minTimeSecondsBeforeWrapUp) lines.push(`Time floor: ${formatDuration(goal.minTimeSecondsBeforeWrapUp)}`);
324
+ }
325
+ if (snapshot.queue.length > 0) {
326
+ lines.push("");
327
+ lines.push(`Queued goals (${snapshot.queue.length}):`);
328
+ snapshot.queue.forEach((item, index) => {
329
+ lines.push(`${index + 1}. [${item.queueId}] ${truncate(item.objective, 120)}`);
330
+ });
331
+ }
332
+ if (snapshot.completed.length > 0) {
333
+ lines.push("");
334
+ lines.push(formatCompletedSummary(snapshot.completed));
335
+ }
336
+ return lines.join("\n");
337
+ }
338
+ async readSnapshot() {
339
+ const filePath = this.statePath();
340
+ if (!await fs.pathExists(filePath)) {
341
+ return emptySnapshot();
342
+ }
343
+ try {
344
+ const raw = await fs.readJson(filePath);
345
+ return normalizeSnapshot(raw);
346
+ } catch {
347
+ return emptySnapshot();
348
+ }
349
+ }
350
+ async writeSnapshot(snapshot) {
351
+ await fs.ensureDir(path.dirname(this.statePath()));
352
+ await fs.writeJson(this.statePath(), snapshot, { spaces: 2 });
353
+ }
354
+ statePath() {
355
+ return path.join(this.workspaceRoot, PROJECT_DIR_NAME, GOAL_STATE_FILE);
356
+ }
357
+ withLiveElapsed(goal) {
358
+ if (goal.status !== "active") return goal;
359
+ const elapsedDelta = Math.max(0, Math.floor((Date.now() - goal.updatedAt) / 1e3));
360
+ return { ...goal, timeUsedSeconds: goal.timeUsedSeconds + elapsedDelta };
361
+ }
362
+ };
363
+ function emptySnapshot() {
364
+ return { version: 1, goal: null, queue: [], completed: [], updatedAt: Date.now() };
365
+ }
366
+ function normalizeSnapshot(raw) {
367
+ return {
368
+ version: 1,
369
+ goal: normalizeGoal(raw.goal),
370
+ queue: Array.isArray(raw.queue) ? raw.queue.map(normalizeQueuedGoal).filter((item) => Boolean(item)) : [],
371
+ completed: Array.isArray(raw.completed) ? raw.completed.map(normalizeCompletedGoal).filter((item) => Boolean(item)) : [],
372
+ updatedAt: typeof raw.updatedAt === "number" ? raw.updatedAt : Date.now()
373
+ };
374
+ }
375
+ function normalizeGoal(value) {
376
+ if (!value || typeof value !== "object") return null;
377
+ const raw = value;
378
+ if (typeof raw.goalId !== "string" || typeof raw.objective !== "string" || !isGoalStatus(raw.status)) return null;
379
+ return {
380
+ goalId: raw.goalId,
381
+ objective: raw.objective,
382
+ status: raw.status,
383
+ tokenBudget: positiveInteger(raw.tokenBudget),
384
+ timeBudgetSeconds: positiveInteger(raw.timeBudgetSeconds),
385
+ minTokensBeforeWrapUp: positiveInteger(raw.minTokensBeforeWrapUp),
386
+ minTimeSecondsBeforeWrapUp: positiveInteger(raw.minTimeSecondsBeforeWrapUp),
387
+ tokensUsed: positiveInteger(raw.tokensUsed) ?? 0,
388
+ timeUsedSeconds: positiveInteger(raw.timeUsedSeconds) ?? 0,
389
+ createdAt: typeof raw.createdAt === "number" ? raw.createdAt : Date.now(),
390
+ updatedAt: typeof raw.updatedAt === "number" ? raw.updatedAt : Date.now()
391
+ };
392
+ }
393
+ function normalizeQueuedGoal(value) {
394
+ if (!value || typeof value !== "object") return null;
395
+ const raw = value;
396
+ if (typeof raw.queueId !== "string" || typeof raw.objective !== "string") return null;
397
+ return {
398
+ queueId: raw.queueId,
399
+ objective: raw.objective,
400
+ tokenBudget: positiveInteger(raw.tokenBudget),
401
+ timeBudgetSeconds: positiveInteger(raw.timeBudgetSeconds),
402
+ minTokensBeforeWrapUp: positiveInteger(raw.minTokensBeforeWrapUp),
403
+ minTimeSecondsBeforeWrapUp: positiveInteger(raw.minTimeSecondsBeforeWrapUp),
404
+ source: raw.source === "command" || raw.source === "tool" || raw.source === "rpc" || raw.source === "cli" ? raw.source : "tool",
405
+ template: typeof raw.template === "string" ? raw.template : void 0,
406
+ templateFlags: isStringRecord(raw.templateFlags) ? raw.templateFlags : void 0,
407
+ templateArgs: typeof raw.templateArgs === "string" ? raw.templateArgs : void 0,
408
+ createdAt: typeof raw.createdAt === "number" ? raw.createdAt : Date.now()
409
+ };
410
+ }
411
+ function normalizeCompletedGoal(value) {
412
+ if (!value || typeof value !== "object") return null;
413
+ const raw = value;
414
+ if (typeof raw.goalId !== "string" || typeof raw.objective !== "string") return null;
415
+ if (raw.status !== "complete" && raw.status !== "budgetLimited") return null;
416
+ return {
417
+ goalId: raw.goalId,
418
+ objective: raw.objective,
419
+ status: raw.status,
420
+ tokensUsed: positiveInteger(raw.tokensUsed) ?? 0,
421
+ timeUsedSeconds: positiveInteger(raw.timeUsedSeconds) ?? 0,
422
+ createdAt: typeof raw.createdAt === "number" ? raw.createdAt : Date.now(),
423
+ completedAt: typeof raw.completedAt === "number" ? raw.completedAt : Date.now()
424
+ };
425
+ }
426
+ function buildQueuedGoal(input) {
427
+ return {
428
+ queueId: `q-${Date.now()}-${crypto.randomUUID().slice(0, 8)}`,
429
+ objective: input.objective.trim(),
430
+ tokenBudget: input.tokenBudget,
431
+ timeBudgetSeconds: input.timeBudgetSeconds,
432
+ minTokensBeforeWrapUp: input.minTokensBeforeWrapUp,
433
+ minTimeSecondsBeforeWrapUp: input.minTimeSecondsBeforeWrapUp,
434
+ source: input.source,
435
+ template: input.template,
436
+ templateFlags: input.templateFlags,
437
+ templateArgs: input.templateArgs,
438
+ createdAt: Date.now()
439
+ };
440
+ }
441
+ function buildCompletedGoal(goal, completedAt) {
442
+ return {
443
+ goalId: goal.goalId,
444
+ objective: goal.objective,
445
+ status: goal.status === "budgetLimited" ? "budgetLimited" : "complete",
446
+ tokensUsed: goal.tokensUsed,
447
+ timeUsedSeconds: goal.timeUsedSeconds,
448
+ createdAt: goal.createdAt,
449
+ completedAt
450
+ };
451
+ }
452
+ function appendCompletedGoal(completed, goal) {
453
+ if (completed.some((item) => item.goalId === goal.goalId)) return completed;
454
+ return [...completed, goal];
455
+ }
456
+ function validateGoalInput(input) {
457
+ const objective = input.objective.trim();
458
+ if (!objective) return "objective must be non-empty.";
459
+ if (objective.length > MAX_OBJECTIVE_LENGTH) return `objective is too long (max ${MAX_OBJECTIVE_LENGTH} characters).`;
460
+ for (const [name, value] of [
461
+ ["tokenBudget", input.tokenBudget],
462
+ ["timeBudgetSeconds", input.timeBudgetSeconds],
463
+ ["minTokensBeforeWrapUp", input.minTokensBeforeWrapUp],
464
+ ["minTimeSecondsBeforeWrapUp", input.minTimeSecondsBeforeWrapUp]
465
+ ]) {
466
+ if (value !== void 0 && (!Number.isInteger(value) || value <= 0)) return `${name} must be a positive integer.`;
467
+ }
468
+ return validateFloors(input);
469
+ }
470
+ function validateFloors(input) {
471
+ if (input.tokenBudget !== void 0 && input.minTokensBeforeWrapUp !== void 0 && input.minTokensBeforeWrapUp > input.tokenBudget) {
472
+ return "minTokensBeforeWrapUp cannot be greater than tokenBudget.";
473
+ }
474
+ if (input.timeBudgetSeconds !== void 0 && input.minTimeSecondsBeforeWrapUp !== void 0 && input.minTimeSecondsBeforeWrapUp > input.timeBudgetSeconds) {
475
+ return "minTimeSecondsBeforeWrapUp cannot be greater than timeBudgetSeconds.";
476
+ }
477
+ return null;
478
+ }
479
+ function transitionStatus(goal, status) {
480
+ const now = Date.now();
481
+ if (goal.status === "active" && status !== "active") {
482
+ const elapsedDelta = Math.max(0, Math.floor((now - goal.updatedAt) / 1e3));
483
+ return { ...goal, status, timeUsedSeconds: goal.timeUsedSeconds + elapsedDelta, updatedAt: now };
484
+ }
485
+ if (goal.status !== "active" && status === "active") {
486
+ return { ...goal, status, updatedAt: now };
487
+ }
488
+ return { ...goal, status, updatedAt: now };
489
+ }
490
+ function budgetLimitReason(goal) {
491
+ if (goal.tokenBudget !== void 0 && goal.tokensUsed >= goal.tokenBudget) return "tokenBudget";
492
+ if (goal.timeBudgetSeconds !== void 0 && goal.timeUsedSeconds >= goal.timeBudgetSeconds) return "timeBudget";
493
+ return null;
494
+ }
495
+ function applyOptionalPositiveInteger(value, apply) {
496
+ if (value === void 0) return null;
497
+ if (value === null) {
498
+ apply(void 0);
499
+ return null;
500
+ }
501
+ if (!Number.isInteger(value) || value <= 0) return "budget and floor values must be positive integers or null.";
502
+ apply(value);
503
+ return null;
504
+ }
505
+ function result(snapshot, ok, message, extras = {}) {
506
+ const goal = snapshot.goal;
507
+ return {
508
+ ok,
509
+ goal,
510
+ queue: snapshot.queue,
511
+ message,
512
+ telemetry: goal ? {
513
+ timeRemainingSeconds: goal.timeBudgetSeconds !== void 0 ? Math.max(0, goal.timeBudgetSeconds - goal.timeUsedSeconds) : void 0,
514
+ tokensRemaining: goal.tokenBudget !== void 0 ? Math.max(0, goal.tokenBudget - goal.tokensUsed) : void 0,
515
+ completionFloorMet: floorMet(goal)
516
+ } : void 0,
517
+ ...extras
518
+ };
519
+ }
520
+ function floorMet(goal) {
521
+ const tokenMet = goal.minTokensBeforeWrapUp === void 0 || goal.tokensUsed >= goal.minTokensBeforeWrapUp;
522
+ const timeMet = goal.minTimeSecondsBeforeWrapUp === void 0 || goal.timeUsedSeconds >= goal.minTimeSecondsBeforeWrapUp;
523
+ return tokenMet && timeMet;
524
+ }
525
+ function positiveInteger(value) {
526
+ return typeof value === "number" && Number.isInteger(value) && value >= 0 ? value : void 0;
527
+ }
528
+ function isGoalStatus(value) {
529
+ return value === "active" || value === "paused" || value === "budgetLimited" || value === "complete";
530
+ }
531
+ function isStringRecord(value) {
532
+ if (!value || typeof value !== "object" || Array.isArray(value)) return false;
533
+ return Object.values(value).every((entry) => typeof entry === "string");
534
+ }
535
+ function truncate(value, max) {
536
+ return value.length > max ? `${value.slice(0, max - 3)}...` : value;
537
+ }
538
+ function formatAllCompleteMessage(completedRun) {
539
+ return [
540
+ "All queued goals are complete.",
541
+ "",
542
+ formatCompletedSummary(completedRun)
543
+ ].join("\n");
544
+ }
545
+ function formatCompletedSummary(completedRun) {
546
+ return [
547
+ `Completed goals this session (${completedRun.length}):`,
548
+ ...completedRun.map((item, index) => `${index + 1}. ${truncate(item.objective, 120)}`)
549
+ ].join("\n");
550
+ }
551
+ function formatDuration(seconds) {
552
+ const whole = Math.max(0, Math.floor(seconds));
553
+ const minutes = Math.floor(whole / 60);
554
+ const secs = whole % 60;
555
+ return minutes > 0 ? `${minutes}m ${secs}s` : `${secs}s`;
556
+ }
557
+
558
+ export {
559
+ GoalManager
560
+ };
561
+ /**
562
+ * @license
563
+ * Copyright 2025 Autohand AI LLC
564
+ * SPDX-License-Identifier: Apache-2.0
565
+ */