autohand-cli 0.9.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -2
- package/dist/{AgentRegistry-XPWSVO3Q.js → AgentRegistry-GOV7FN2O.js} +2 -2
- package/dist/AgentRegistry-J2C6JBZ3.cjs +10 -0
- package/dist/CommunitySkillsCache-22BB3J6H.cjs +8 -0
- package/dist/{CommunitySkillsCache-ZEQWP6YM.js → CommunitySkillsCache-ZACDPD4J.js} +2 -2
- package/dist/{HookManager-CWLTFKWO.js → HookManager-2S6AHOC3.js} +1 -1
- package/dist/{HookManager-TMAJQU4S.cjs → HookManager-TVEQI5ZU.cjs} +2 -2
- package/dist/{ImportWizard-QBKQEXDW.js → ImportWizard-AEBMAKXE.js} +4 -4
- package/dist/{ImportWizard-MQXEED2U.cjs → ImportWizard-AF2XL6DS.cjs} +13 -13
- package/dist/LearnAdvisor-KKEQ5QCV.js +9 -0
- package/dist/LearnAdvisor-Q7RAYLPF.cjs +9 -0
- package/dist/MemoryManager-PMNAEZMB.cjs +8 -0
- package/dist/{MemoryManager-WJMLPWGU.js → MemoryManager-QZRLTUB5.js} +2 -2
- package/dist/NVIDIAProvider-C3FWQOBZ.cjs +14 -0
- package/dist/{NVIDIAProvider-2HR737UE.js → NVIDIAProvider-SJPY3ONR.js} +1 -1
- package/dist/{PermissionManager-KMYILJ4Z.js → PermissionManager-MT7KBNNR.js} +3 -3
- package/dist/PermissionManager-URCNP5EC.cjs +11 -0
- package/dist/ProviderFactory-56N3ECE4.cjs +12 -0
- package/dist/{ProviderFactory-HFPRVQ25.js → ProviderFactory-RB4RVAF6.js} +3 -2
- package/dist/SessionManager-2IZGWASQ.cjs +10 -0
- package/dist/{SessionManager-PNBTJJTQ.js → SessionManager-554PHVPC.js} +2 -2
- package/dist/SkillsRegistry-GMRVONOQ.cjs +9 -0
- package/dist/{SkillsRegistry-4RRD5GMX.js → SkillsRegistry-NHHMIUYJ.js} +2 -2
- package/dist/SubAgent-4GOR2FIJ.js +13 -0
- package/dist/SubAgent-ZJMDH4FI.cjs +13 -0
- package/dist/{SyncApiClient-LRPFNCKJ.js → SyncApiClient-G3FM65IV.js} +1 -1
- package/dist/SyncApiClient-ODBDECOG.cjs +11 -0
- package/dist/{about-BW3PDZUU.js → about-3USFSGOH.js} +5 -4
- package/dist/about-QR52U5DD.cjs +15 -0
- package/dist/{acp-VHEL7BOW.js → acp-5Y2W6OZP.js} +129 -90
- package/dist/{acp-EOETGAHC.cjs → acp-GSYE75OB.cjs} +135 -96
- package/dist/actionExecutor-KHUU3Z3Q.cjs +28 -0
- package/dist/{actionExecutor-33I47NZS.js → actionExecutor-PLQJZLZV.js} +12 -8
- package/dist/add-dir-BTAD5OZS.cjs +11 -0
- package/dist/{add-dir-VFX7QT4E.js → add-dir-HCERJDBR.js} +2 -2
- package/dist/agent-B3EVT7NN.cjs +126 -0
- package/dist/agent-SATQ3WZ3.js +126 -0
- package/dist/agents-44CRJGM7.cjs +18 -0
- package/dist/agents-NN4ZAJ7R.js +18 -0
- package/dist/agents-new-6D6G4QS6.cjs +17 -0
- package/dist/agents-new-7GAQ25EK.js +17 -0
- package/dist/{autoSkill-EFMK6WU6.js → autoSkill-66PKCYTW.js} +2 -2
- package/dist/autoSkill-VQLGBELN.cjs +20 -0
- package/dist/automode-45DWV4TN.cjs +10 -0
- package/dist/{automode-BMYSRM34.js → automode-BUF3VGXU.js} +2 -2
- package/dist/chrome-Q2U73HZB.cjs +50 -0
- package/dist/chrome-Q54OALOK.cjs +21 -0
- package/dist/{chrome-NHJ44WUN.js → chrome-Y3T7EIHG.js} +2 -2
- package/dist/chrome-ZNJ46OYW.js +21 -0
- package/dist/{chunk-D2OSPLYC.cjs → chunk-22SCR3EV.cjs} +2 -2
- package/dist/chunk-26G7YGOW.js +367 -0
- package/dist/{chunk-75EDROHL.cjs → chunk-2ESQR35E.cjs} +10 -10
- package/dist/{chunk-HKYZSUQ5.js → chunk-2IW5YFJ4.js} +4 -4
- package/dist/{chunk-JP3YHTQ2.cjs → chunk-3ICORF7M.cjs} +4 -4
- package/dist/{chunk-4256YRCO.cjs → chunk-3UC6DMFI.cjs} +30 -17
- package/dist/{chunk-6GUODJKM.cjs → chunk-3UHRCHKB.cjs} +23 -23
- package/dist/{chunk-HXJEGMGB.js → chunk-3ZOOH44N.js} +2 -2
- package/dist/{chunk-7RFJB75Y.js → chunk-44ZWOBTI.js} +9 -9
- package/dist/{chunk-CCVMREXI.js → chunk-4567QNRB.js} +32 -8
- package/dist/chunk-45CHNQM6.cjs +517 -0
- package/dist/{chunk-6NVAK6CK.js → chunk-4E7SHPNQ.js} +2 -2
- package/dist/{chunk-XGMI6IYB.cjs → chunk-4XFHP2SN.cjs} +7 -7
- package/dist/chunk-4XVLNOFA.js +360 -0
- package/dist/{chunk-D6GZBSOX.js → chunk-575PXZX7.js} +1 -1
- package/dist/{chunk-HJIXWGQZ.js → chunk-5A7ZL64N.js} +1 -1
- package/dist/{chunk-ROLA6EFO.cjs → chunk-5GCQ5UMV.cjs} +14 -14
- package/dist/{chunk-3DDL2E55.cjs → chunk-5SFV2NCY.cjs} +10 -10
- package/dist/chunk-5ZNYX4VH.cjs +71 -0
- package/dist/{chunk-PDHT7LQS.cjs → chunk-63ANVAOJ.cjs} +3 -3
- package/dist/{chunk-GWO66KBI.js → chunk-65LRPW5W.js} +1 -1
- package/dist/{chunk-IAGCRVJ3.js → chunk-6AYJCDTA.js} +14 -9
- package/dist/{chunk-A7HHCIDQ.js → chunk-6HF6XSCC.js} +2 -2
- package/dist/{chunk-47PHDKNW.cjs → chunk-6JWCGQJU.cjs} +6 -6
- package/dist/chunk-6OECOAK5.cjs +360 -0
- package/dist/{chunk-RBHANOYY.js → chunk-7DJJGKM6.js} +47 -3
- package/dist/{chunk-37M5UM6I.js → chunk-7IRQ7JEH.js} +1 -1
- package/dist/chunk-7MY4JHER.js +27 -0
- package/dist/{chunk-ZR46OJNZ.js → chunk-7PJKTSRN.js} +3 -3
- package/dist/{chunk-AC7DZ6SK.cjs → chunk-7PT646AL.cjs} +3 -3
- package/dist/{chunk-TKKN34TV.js → chunk-7WAUCLLQ.js} +3 -3
- package/dist/{chunk-DPSIGY6L.cjs → chunk-7XTUL7ZD.cjs} +9 -9
- package/dist/{chunk-GBMDFWJX.cjs → chunk-AE2ILW25.cjs} +13 -13
- package/dist/{chunk-BQ22N3TX.cjs → chunk-AOKXYGBQ.cjs} +27 -22
- package/dist/{chunk-REMGR23V.cjs → chunk-AQ5PVHOC.cjs} +7 -2
- package/dist/{chunk-AUYSIEVV.cjs → chunk-AZ47LKD5.cjs} +3 -3
- package/dist/chunk-B76FJKEJ.cjs +184 -0
- package/dist/{chunk-XV2HXRHX.js → chunk-BP37FVBM.js} +3 -3
- package/dist/{chunk-JIMSII7R.js → chunk-C46B72VK.js} +57 -10
- package/dist/{chunk-L4F7SUYL.js → chunk-C5QIQQ37.js} +3 -3
- package/dist/{chunk-AUFNACED.js → chunk-CCIDL4SA.js} +7094 -6126
- package/dist/{chunk-OV3PVUYN.js → chunk-CECH6QQP.js} +11 -11
- package/dist/{chunk-CH2J4PVE.cjs → chunk-CK4HAHVY.cjs} +13 -13
- package/dist/{chunk-Q2IL4DDI.cjs → chunk-CO2AADYU.cjs} +19 -14
- package/dist/{chunk-7JLT2VNW.cjs → chunk-CRTCZ4WL.cjs} +7533 -6565
- package/dist/{chunk-5JFTY3VU.js → chunk-CSTUTDTH.js} +2 -1
- package/dist/{chunk-DIZTWFVR.cjs → chunk-D546G7DA.cjs} +209 -55
- package/dist/{chunk-7HPWMALN.js → chunk-DGBPWODD.js} +1 -1
- package/dist/{chunk-RBZ7AFX7.cjs → chunk-DHUQZ53B.cjs} +2 -2
- package/dist/{chunk-U4C3HW6P.js → chunk-DNSD7DVJ.js} +2 -2
- package/dist/{chunk-SOLBYSLY.cjs → chunk-DSSCERHI.cjs} +2 -2
- package/dist/{chunk-OPNI6O7F.cjs → chunk-EA2MS25U.cjs} +4 -4
- package/dist/{chunk-E46DJH5S.js → chunk-EEHWALXA.js} +94 -3
- package/dist/{chunk-CFFE4VA3.js → chunk-EYHKL4QC.js} +1 -1
- package/dist/{chunk-FGT6KK6T.js → chunk-FBQJZKFX.js} +3 -3
- package/dist/{chunk-I24CWKKK.js → chunk-FFHSCM5M.js} +3 -3
- package/dist/{chunk-TXPSTCG7.cjs → chunk-GAOPJ5S3.cjs} +8 -8
- package/dist/{chunk-ARBEHFCG.js → chunk-GSDV75A5.js} +1 -1
- package/dist/{chunk-Z3XSSF7B.js → chunk-H426KOGY.js} +1 -1
- package/dist/{chunk-WRTXCQ3V.cjs → chunk-HC2Q6A3E.cjs} +858 -182
- package/dist/{chunk-IGMPWJ2I.cjs → chunk-HG3ZASBH.cjs} +8 -8
- package/dist/chunk-HK5A54AV.cjs +280 -0
- package/dist/{chunk-2HOLOHVK.js → chunk-HSWWM6AM.js} +136 -15
- package/dist/chunk-HTU4W3GB.js +183 -0
- package/dist/{chunk-5CMYEM3R.cjs → chunk-HVCIB4SW.cjs} +3 -3
- package/dist/chunk-HXHE2KAO.js +385 -0
- package/dist/{chunk-NMQ47RCG.js → chunk-HZWU6IO3.js} +5 -2
- package/dist/{chunk-ZPD2AO3U.js → chunk-I2ZK3AOD.js} +2 -2
- package/dist/{chunk-3UT7R3XV.js → chunk-IEPLQ47J.js} +61 -5
- package/dist/{chunk-3PXKRVCW.js → chunk-JB3JCYBJ.js} +7 -2
- package/dist/chunk-JCUHCH37.cjs +247 -0
- package/dist/{chunk-VBOFPU5M.cjs → chunk-JM3ZTQUK.cjs} +13 -9
- package/dist/{chunk-WZV6UVPY.js → chunk-JMJRFSNJ.js} +1 -1
- package/dist/{chunk-QKP772OZ.js → chunk-JPFRI4L4.js} +756 -80
- package/dist/{chunk-MOJ7ADW4.cjs → chunk-JV5HVCHU.cjs} +2 -2
- package/dist/{chunk-LN7D3EJZ.js → chunk-KA2U6MY2.js} +4 -3
- package/dist/{chunk-E26KKI46.cjs → chunk-KASXKDF2.cjs} +3 -1
- package/dist/chunk-KJ26T7GM.cjs +367 -0
- package/dist/chunk-KM7R5YPS.cjs +385 -0
- package/dist/{chunk-5F6ZKSHO.js → chunk-KMP6Y3LJ.js} +1 -1
- package/dist/chunk-KWXGDSYT.js +184 -0
- package/dist/{chunk-LDJQ5QHG.cjs → chunk-L46OUKW5.cjs} +15 -15
- package/dist/{chunk-Z4LIPMPM.js → chunk-L6OH44HL.js} +13 -9
- package/dist/chunk-LANGD5CO.js +280 -0
- package/dist/{chunk-CBFH2J3O.js → chunk-LEZEWKPA.js} +150 -7
- package/dist/{chunk-FQAVGSPW.js → chunk-M5DK524Z.js} +2 -2
- package/dist/{chunk-7LWQCE4Y.cjs → chunk-M7B7RRBK.cjs} +72 -25
- package/dist/{chunk-BWF4VDYE.js → chunk-MANJ67D3.js} +2 -2
- package/dist/{chunk-PHJO5YAL.cjs → chunk-MGNXABSU.cjs} +9 -9
- package/dist/{chunk-62RTC3XX.js → chunk-MMKZSJUN.js} +1 -1
- package/dist/{chunk-3KLSNNRW.cjs → chunk-MQQH4XQH.cjs} +4 -4
- package/dist/{chunk-HS4USDND.cjs → chunk-MZN6JBRZ.cjs} +2 -2
- package/dist/{chunk-AT7OWLY5.js → chunk-NB6M6ESM.js} +1 -1
- package/dist/{chunk-TQ33WBY5.cjs → chunk-NHWHEW7M.cjs} +2 -1
- package/dist/chunk-NQZH5CR2.cjs +468 -0
- package/dist/{chunk-2CGE7ZV3.cjs → chunk-NV6LCD2I.cjs} +119 -28
- package/dist/chunk-NVATU4V6.cjs +44 -0
- package/dist/{chunk-DLP436GI.js → chunk-NZ3ZWLUW.js} +2 -2
- package/dist/{chunk-IEXKKKOF.cjs → chunk-NZ7GCK7Y.cjs} +23 -23
- package/dist/{chunk-MQESBFBZ.cjs → chunk-NZQFKXM3.cjs} +21 -20
- package/dist/{chunk-QQ7PANOP.js → chunk-O5GI6SR3.js} +1 -1
- package/dist/{chunk-J5ADZN6V.cjs → chunk-OCATAKXV.cjs} +20 -20
- package/dist/{chunk-JYKPWK5O.js → chunk-OIGYWOL6.js} +1 -1
- package/dist/{chunk-O6TQP7U7.cjs → chunk-ONVYXTUT.cjs} +3 -3
- package/dist/{chunk-MPULXVC4.cjs → chunk-OV3T5MUH.cjs} +11 -11
- package/dist/{chunk-DMRXF5DU.js → chunk-P4FUTSVK.js} +3 -3
- package/dist/{chunk-MXVIDIC6.cjs → chunk-P6SLT2F4.cjs} +2 -2
- package/dist/{chunk-BL2UC7HC.js → chunk-PGFLPURU.js} +1 -1
- package/dist/{chunk-CWINVFRI.cjs → chunk-PIXQ2AVM.cjs} +17 -17
- package/dist/{chunk-MO4KP6XS.cjs → chunk-PNIAIOMZ.cjs} +5 -5
- package/dist/{chunk-HQWQZML5.cjs → chunk-PQBYFEBL.cjs} +2 -2
- package/dist/{chunk-UGFVM77J.cjs → chunk-PSAH4ZQB.cjs} +2 -2
- package/dist/{chunk-Y3M2DABP.js → chunk-PTTZI4QZ.js} +4 -4
- package/dist/{chunk-Q6AC3PHY.cjs → chunk-PY73W5MQ.cjs} +4 -4
- package/dist/{chunk-B5CGDNMR.js → chunk-PZZMIYII.js} +3 -3
- package/dist/{chunk-VRMZO6TB.js → chunk-Q3BS6FPM.js} +7 -6
- package/dist/chunk-QBYGMMDD.js +517 -0
- package/dist/{chunk-3LJJG5YY.cjs → chunk-QLZOMZO5.cjs} +4 -3
- package/dist/{chunk-3S563FNF.cjs → chunk-QQ64HEHP.cjs} +31 -31
- package/dist/{chunk-TBOLJDUG.js → chunk-QRQF3556.js} +12 -7
- package/dist/{chunk-ZZ63NW7A.cjs → chunk-RBXBH6EB.cjs} +17 -17
- package/dist/{chunk-PUD76XQT.cjs → chunk-RFUKZIJF.cjs} +5 -5
- package/dist/chunk-RS2E32YB.js +71 -0
- package/dist/{chunk-7MU7LWF3.cjs → chunk-S5JNQIGL.cjs} +5 -5
- package/dist/{chunk-BFQDQRDE.js → chunk-S5QKRA2V.js} +2 -2
- package/dist/{chunk-IKUMVBCW.cjs → chunk-SD3NTC7D.cjs} +48 -4
- package/dist/{chunk-PQLKJCIE.js → chunk-SDLY4X3G.js} +2 -2
- package/dist/{chunk-VKBIE6I6.js → chunk-SFFEKZGC.js} +2 -2
- package/dist/{chunk-TWQDAUZU.js → chunk-SHRLFX6F.js} +3 -1
- package/dist/{chunk-UEIXJG45.js → chunk-SNDDZG5H.js} +88 -72
- package/dist/{chunk-AOKCI722.cjs → chunk-SOVR7S3T.cjs} +2 -2
- package/dist/{chunk-M4KNC5BQ.js → chunk-SPQ7QIQ6.js} +1 -1
- package/dist/{chunk-QCHIDZBA.js → chunk-SRMGWMQO.js} +1 -1
- package/dist/{chunk-ZHJ7JGME.cjs → chunk-SVVP4UUZ.cjs} +11 -11
- package/dist/{chunk-CHI52KFR.cjs → chunk-SY2P3Z5W.cjs} +150 -7
- package/dist/chunk-SZD45IDG.js +468 -0
- package/dist/{chunk-VGEV44V2.cjs → chunk-TE4SYTWR.cjs} +189 -28
- package/dist/{chunk-YV63VW4K.js → chunk-TR6NECEZ.js} +1 -1
- package/dist/{chunk-GZ6DV2UG.js → chunk-TYBPTKFT.js} +1 -1
- package/dist/{chunk-5VHP6HDQ.js → chunk-U2QUMKCB.js} +1 -1
- package/dist/{chunk-6HH236FV.cjs → chunk-U6PLSPMD.cjs} +2 -2
- package/dist/{chunk-EZJHLOWP.js → chunk-UWZ4G3SQ.js} +20 -7
- package/dist/{chunk-UXLW45ZE.cjs → chunk-V3SZLWEQ.cjs} +25 -90
- package/dist/chunk-V4HGZSKQ.cjs +183 -0
- package/dist/{chunk-2QL6MNXG.js → chunk-V5ELP2XE.js} +6 -6
- package/dist/{chunk-N6O3XUZ2.cjs → chunk-VKOXFT4L.cjs} +2 -2
- package/dist/{chunk-J2K57QM7.cjs → chunk-VLGGMQUN.cjs} +6 -6
- package/dist/{chunk-HSCUPEA4.cjs → chunk-VQHSYAPZ.cjs} +11 -11
- package/dist/{chunk-DEQVRSV5.cjs → chunk-W5QLA6WP.cjs} +8 -8
- package/dist/chunk-WJYFLQ7G.cjs +27 -0
- package/dist/{chunk-MX75JYIY.js → chunk-WNJXIACY.js} +3 -3
- package/dist/{chunk-OHWMWKJQ.js → chunk-WPE2XHVX.js} +1 -1
- package/dist/{chunk-O64I2GYI.js → chunk-X3TI5TJJ.js} +1 -1
- package/dist/{chunk-46C73ZKK.cjs → chunk-X5P6QQOB.cjs} +66 -10
- package/dist/{chunk-TJNBASFD.cjs → chunk-X7XMITIL.cjs} +8 -8
- package/dist/{chunk-E6GFD7VR.cjs → chunk-XNIMSVS6.cjs} +11 -11
- package/dist/{chunk-WGLBC5AY.cjs → chunk-XW3XCK4E.cjs} +4 -4
- package/dist/{chunk-OM24WXEE.js → chunk-XZVDYC5U.js} +1 -1
- package/dist/{chunk-UWFG2R2I.cjs → chunk-Y5BDE24P.cjs} +33 -9
- package/dist/{chunk-GGLKUENP.js → chunk-YC5OBZQU.js} +161 -7
- package/dist/{chunk-JJ4KA7HK.cjs → chunk-YISPVAXO.cjs} +371 -250
- package/dist/{chunk-SWCQM52V.js → chunk-YQDI753V.js} +4 -4
- package/dist/{chunk-KNTUI4TZ.cjs → chunk-YWH55BWK.cjs} +9 -6
- package/dist/{chunk-ACDQGA4Z.js → chunk-YXM6SA7P.js} +7 -72
- package/dist/{chunk-3GUEUCZK.js → chunk-ZNGRLCFQ.js} +2 -0
- package/dist/{chunk-LQBONA55.cjs → chunk-ZNYZB7XY.cjs} +2 -0
- package/dist/{chunk-XIVFAD2L.js → chunk-ZPLCAXJW.js} +172 -11
- package/dist/chunk-ZUYYHKQA.js +44 -0
- package/dist/clear-QJXU25IF.cjs +12 -0
- package/dist/{clear-OFLFQ3MR.js → clear-Y5TO3RZA.js} +2 -2
- package/dist/communityInstaller-LXMVKVAV.cjs +22 -0
- package/dist/{communityInstaller-COB2KTOW.js → communityInstaller-RVL4STPS.js} +6 -6
- package/dist/completion-JX4T2ONW.cjs +17 -0
- package/dist/{completion-PT4VM2H2.js → completion-SE3XYG74.js} +5 -5
- package/dist/config-3224PRW4.cjs +21 -0
- package/dist/{config-R4O7GBTY.js → config-7KPHKFTP.js} +4 -3
- package/dist/{constants-HVCHVQAF.js → constants-EJFAWJQI.js} +1 -1
- package/dist/constants-MCCGUU5F.cjs +21 -0
- package/dist/{export-3PK3VFCE.js → export-BJVIDZC4.js} +5 -5
- package/dist/export-KU4557HK.cjs +15 -0
- package/dist/feature-K3LG5IJP.cjs +14 -0
- package/dist/feature-V4JF5TNJ.js +14 -0
- package/dist/features-5OJTLKS7.js +23 -0
- package/dist/features-VCBJQXCX.cjs +23 -0
- package/dist/feedback-D4437VE4.js +18 -0
- package/dist/feedback-VZPEHGFY.cjs +18 -0
- package/dist/go-X4E6BCD6.js +12 -0
- package/dist/go-XREVFS5I.cjs +12 -0
- package/dist/goal-4M3J6JS2.cjs +16 -0
- package/dist/goal-EI66BV7W.js +16 -0
- package/dist/help-GGFS7WHY.cjs +12 -0
- package/dist/{help-X3OAZ3CY.js → help-MLIROWKM.js} +2 -2
- package/dist/{history-YKFPHBJN.js → history-GQJ6RZD6.js} +2 -2
- package/dist/history-J4LUIOSI.cjs +14 -0
- package/dist/hooks-FSRIUS6A.cjs +18 -0
- package/dist/{hooks-7TA4PIIB.js → hooks-PPFHCF7T.js} +6 -6
- package/dist/i18n-CI6VFXL5.cjs +33 -0
- package/dist/{i18n-2KBUU7XL.js → i18n-Q7UZJRPL.js} +1 -1
- package/dist/ide-BUSVE54P.js +15 -0
- package/dist/ide-YR27BPGM.cjs +15 -0
- package/dist/{import-4CHYLS4K.js → import-3VBKI6BN.js} +3 -3
- package/dist/{import-I7T4ZHYL.cjs → import-C7S6UJMW.cjs} +3 -3
- package/dist/import-DBK4OCDF.cjs +10 -0
- package/dist/{import-JWPYKXCZ.js → import-U47DXCA7.js} +2 -2
- package/dist/index.cjs +267 -170
- package/dist/index.d.cts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +165 -68
- package/dist/init-OXTYS72D.cjs +10 -0
- package/dist/{init-262MWZV4.js → init-Q2O4R42R.js} +2 -2
- package/dist/{inputPrompt-YGBHDUEP.js → inputPrompt-3CFZDUBH.js} +2 -2
- package/dist/inputPrompt-JMACL4EB.cjs +90 -0
- package/dist/language-EK3M6UBV.cjs +22 -0
- package/dist/language-Q3RUGGOW.js +22 -0
- package/dist/learn-3DSX7DYG.cjs +23 -0
- package/dist/learn-OPOH5L43.js +23 -0
- package/dist/login-GST7MWXJ.cjs +27 -0
- package/dist/login-Q7DZKAX4.js +27 -0
- package/dist/logout-2G7OUK7I.cjs +24 -0
- package/dist/logout-FNBBL2UI.js +24 -0
- package/dist/{mcp-5O6PUL4G.js → mcp-AH3MMUBU.js} +7 -6
- package/dist/mcp-DW7R63IB.cjs +21 -0
- package/dist/{mcp-install-6XWXLFVY.js → mcp-install-222PCKSW.js} +9 -8
- package/dist/{mcp-install-P6DHES7V.cjs → mcp-install-IA4ZS2SV.cjs} +14 -13
- package/dist/memory-6NX3DAIY.cjs +10 -0
- package/dist/{memory-Q54CESNM.js → memory-VB46T5H3.js} +2 -2
- package/dist/model-64NAELFS.cjs +10 -0
- package/dist/{model-6AJ77PJG.js → model-SJJG64AM.js} +2 -2
- package/dist/new-DU5SOOOY.cjs +12 -0
- package/dist/{new-ZXHEWC2S.js → new-ERZ5C6CN.js} +2 -2
- package/dist/onboarding-2U2BV2KE.cjs +36 -0
- package/dist/{onboarding-JYNMK6NI.js → onboarding-ZQXMPSMJ.js} +14 -13
- package/dist/{permissions-YHJMVA6L.js → permissions-7ACNFK7A.js} +2 -2
- package/dist/permissions-GSNNV7RJ.cjs +10 -0
- package/dist/{quit-GWTNHQSP.js → quit-WY6T267G.js} +2 -2
- package/dist/quit-XIRE2KRE.cjs +10 -0
- package/dist/{registry-34GL6BNJ.js → registry-4DXUDKJN.js} +1 -1
- package/dist/{registry-V24W7YK6.cjs → registry-UEO3ETZ7.cjs} +21 -21
- package/dist/resume-RQZ3WXBP.cjs +17 -0
- package/dist/resume-XSXZMDMD.js +17 -0
- package/dist/{rpc-S3DGW6KV.js → rpc-XH7QLN4H.js} +251 -107
- package/dist/{rpc-NPS3PU4O.cjs → rpc-YF54T7JU.cjs} +347 -203
- package/dist/search-VXXFGZWU.cjs +21 -0
- package/dist/search-YAWGX7P7.js +21 -0
- package/dist/{sessions-IYAXMK23.js → sessions-NJYHJOEL.js} +2 -2
- package/dist/sessions-OSG3UJEZ.cjs +10 -0
- package/dist/settings-SO2UIGWV.cjs +42 -0
- package/dist/{settings-55BNW6BF.js → settings-ZXUQH3DO.js} +17 -8
- package/dist/setup-KG7EGKF5.js +30 -0
- package/dist/setup-RSOPCQ57.cjs +30 -0
- package/dist/share-WFAGZ5PY.js +17 -0
- package/dist/share-ZU3SGACF.cjs +17 -0
- package/dist/skills-KBVAQAD2.cjs +29 -0
- package/dist/{skills-VWOMV3CR.js → skills-NBTNDVAY.js} +8 -8
- package/dist/{skills-MVIZNHT4.js → skills-OB6RDW7D.js} +9 -9
- package/dist/{skills-GGMZOVIE.cjs → skills-ZROBG3RZ.cjs} +10 -10
- package/dist/{skills-install-QBA5RCV6.js → skills-install-BHTIEMKH.js} +7 -7
- package/dist/{skills-install-VTAMCNNY.cjs → skills-install-ILX6QVEF.cjs} +15 -15
- package/dist/skills-new-B45VQ2PP.cjs +18 -0
- package/dist/skills-new-YMRP2HNO.js +18 -0
- package/dist/slashCommands-53VYIBJU.js +105 -0
- package/dist/slashCommands-BG2RGGZ6.cjs +105 -0
- package/dist/status-CQ2IUOVK.cjs +24 -0
- package/dist/status-E7IGNVPC.js +24 -0
- package/dist/{sync-7OKF6636.js → sync-7C25MOT2.js} +6 -5
- package/dist/{sync-7BILIQHP.js → sync-OCJN4ZSO.js} +3 -3
- package/dist/sync-XRP46IVG.cjs +40 -0
- package/dist/sync-ZMFVE7T4.cjs +22 -0
- package/dist/{teammate-J6PHGL23.cjs → teammate-D77B6QRT.cjs} +9 -8
- package/dist/{teammate-GZQSCIMS.js → teammate-EZCMHOIL.js} +8 -7
- package/dist/templates-ARG2VRWW.cjs +11 -0
- package/dist/templates-UGVZV3KJ.js +11 -0
- package/dist/theme-KKRDE6P7.cjs +22 -0
- package/dist/theme-XF7XIWBQ.js +22 -0
- package/dist/ui/questionModal.cjs +6 -6
- package/dist/ui/questionModal.js +5 -5
- package/dist/{undo-SZEHLX7X.js → undo-GNUTFXCW.js} +2 -2
- package/dist/undo-U4KN7QQM.cjs +10 -0
- package/dist/usage-QSTNSDAO.js +24 -0
- package/dist/usage-YDEMQBNQ.cjs +24 -0
- package/package.json +7 -2
- package/dist/AgentRegistry-EGBDIUAK.cjs +0 -10
- package/dist/CommunitySkillsCache-2OIUV227.cjs +0 -8
- package/dist/LearnAdvisor-46FG2XIP.js +0 -9
- package/dist/LearnAdvisor-XBRDNAGH.cjs +0 -9
- package/dist/MemoryManager-34L4YOKA.cjs +0 -8
- package/dist/NVIDIAProvider-MVTL62PR.cjs +0 -14
- package/dist/PermissionManager-5OOJ7FAT.cjs +0 -11
- package/dist/ProviderFactory-C3YPXTDD.cjs +0 -11
- package/dist/SessionManager-WAPTFMDO.cjs +0 -10
- package/dist/SkillsRegistry-7AJP74GJ.cjs +0 -9
- package/dist/SubAgent-FDIH3DXB.js +0 -11
- package/dist/SubAgent-HVL2ICVZ.cjs +0 -11
- package/dist/SyncApiClient-VMBOLQ6H.cjs +0 -11
- package/dist/about-FCAX37YC.cjs +0 -14
- package/dist/actionExecutor-4YBMR3YH.cjs +0 -24
- package/dist/add-dir-7SS6KSH5.cjs +0 -11
- package/dist/agent-DMRUFU4M.cjs +0 -116
- package/dist/agent-WCJEYQJT.js +0 -116
- package/dist/agents-CHROO3VU.cjs +0 -17
- package/dist/agents-UVDUL65K.js +0 -17
- package/dist/agents-new-AUBWSOXP.js +0 -17
- package/dist/agents-new-Y562WC47.cjs +0 -17
- package/dist/autoSkill-YOLLFTP2.cjs +0 -20
- package/dist/automode-DBLKTTKD.cjs +0 -10
- package/dist/chrome-ATC4OO5I.cjs +0 -20
- package/dist/chrome-O62WXV7F.js +0 -20
- package/dist/chrome-XHJLCO4M.cjs +0 -50
- package/dist/chunk-6XVVIY54.cjs +0 -256
- package/dist/chunk-AU6JAGZJ.cjs +0 -231
- package/dist/chunk-VDWJMWDF.js +0 -256
- package/dist/clear-33TWQ2ES.cjs +0 -12
- package/dist/communityInstaller-TWMGPSYM.cjs +0 -22
- package/dist/completion-IIZMHXYP.cjs +0 -17
- package/dist/config-KL6WU7R2.cjs +0 -20
- package/dist/constants-RLMJ5D5P.cjs +0 -21
- package/dist/export-WLGNWEMJ.cjs +0 -15
- package/dist/feedback-G635NCLJ.js +0 -18
- package/dist/feedback-LLMK3TZH.cjs +0 -18
- package/dist/help-BAXLP2M2.cjs +0 -12
- package/dist/history-6HOJSEMT.cjs +0 -14
- package/dist/hooks-XVFU67T2.cjs +0 -18
- package/dist/i18n-MUJMKTFM.cjs +0 -33
- package/dist/ide-CCQ33PGC.cjs +0 -15
- package/dist/ide-VLVFBZ5F.js +0 -15
- package/dist/import-J46F54JY.cjs +0 -10
- package/dist/init-EE5Y7RBL.cjs +0 -10
- package/dist/inputPrompt-IIFKCX5Q.cjs +0 -90
- package/dist/language-CVLPB7OV.js +0 -21
- package/dist/language-ZTWFHUSV.cjs +0 -21
- package/dist/learn-PON7I5QS.js +0 -23
- package/dist/learn-XLRSVNA3.cjs +0 -23
- package/dist/login-223QTGBG.cjs +0 -26
- package/dist/login-6IKTBUBY.js +0 -26
- package/dist/logout-RN2AG6SI.js +0 -23
- package/dist/logout-U3M4FFX7.cjs +0 -23
- package/dist/mcp-NUQ76QQB.cjs +0 -20
- package/dist/memory-CYMDQ2YC.cjs +0 -10
- package/dist/model-IDRCKDML.cjs +0 -10
- package/dist/new-7LEWOUF2.cjs +0 -12
- package/dist/onboarding-FXX7YHSJ.cjs +0 -35
- package/dist/permissions-YBNSANIA.cjs +0 -10
- package/dist/quit-B43SJ6E4.cjs +0 -10
- package/dist/resume-DYVOQN5L.cjs +0 -16
- package/dist/resume-M25UQKOX.js +0 -16
- package/dist/search-CPX4PWHP.js +0 -20
- package/dist/search-VUF3M4N3.cjs +0 -20
- package/dist/sessions-JODKER5D.cjs +0 -10
- package/dist/settings-BKTS7OMC.cjs +0 -33
- package/dist/setup-IRC5HQG2.js +0 -29
- package/dist/setup-MMQ7TWOP.cjs +0 -29
- package/dist/share-6JRQECAH.cjs +0 -17
- package/dist/share-YM5MJKMO.js +0 -17
- package/dist/skills-LWSOKOSH.cjs +0 -29
- package/dist/skills-new-GPL46YV2.js +0 -18
- package/dist/skills-new-L5BEZN5V.cjs +0 -18
- package/dist/slashCommands-FBPCIWM5.cjs +0 -95
- package/dist/slashCommands-FCWY5DXW.js +0 -95
- package/dist/status-3B5SDZPL.js +0 -17
- package/dist/status-TTGRF6NC.cjs +0 -17
- package/dist/sync-77CXVVTK.cjs +0 -21
- package/dist/sync-EH4K5U3N.cjs +0 -40
- package/dist/theme-64BYGJ57.cjs +0 -21
- package/dist/theme-YJE6HEON.js +0 -21
- package/dist/undo-PRTEGL2J.cjs +0 -10
|
@@ -0,0 +1,468 @@
|
|
|
1
|
+
import {
|
|
2
|
+
listGoalTemplateMetadata,
|
|
3
|
+
resolveGoalTemplateByName,
|
|
4
|
+
resolveGoalTemplateInvocation
|
|
5
|
+
} from "./chunk-HTU4W3GB.js";
|
|
6
|
+
import {
|
|
7
|
+
PROJECT_DIR_NAME
|
|
8
|
+
} from "./chunk-SHRLFX6F.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 updateGoal(input) {
|
|
90
|
+
const snapshot = await this.readSnapshot();
|
|
91
|
+
const current = snapshot.goal ? this.withLiveElapsed(snapshot.goal) : null;
|
|
92
|
+
if (!current) return result(snapshot, false, "No goal exists to update.");
|
|
93
|
+
let next = { ...current };
|
|
94
|
+
const changes = [];
|
|
95
|
+
if (input.objective !== void 0) {
|
|
96
|
+
const objective = input.objective.trim();
|
|
97
|
+
if (!objective) return result(snapshot, false, "objective must be non-empty.");
|
|
98
|
+
if (objective.length > MAX_OBJECTIVE_LENGTH) return result(snapshot, false, `objective is too long (max ${MAX_OBJECTIVE_LENGTH} characters).`);
|
|
99
|
+
next = { ...next, objective };
|
|
100
|
+
changes.push("objective");
|
|
101
|
+
}
|
|
102
|
+
const budgetError = applyOptionalPositiveInteger(input.tokenBudget, (value) => {
|
|
103
|
+
next = { ...next, tokenBudget: value };
|
|
104
|
+
changes.push("token budget");
|
|
105
|
+
});
|
|
106
|
+
if (budgetError) return result(snapshot, false, budgetError);
|
|
107
|
+
const timeBudgetError = applyOptionalPositiveInteger(input.timeBudgetSeconds, (value) => {
|
|
108
|
+
next = { ...next, timeBudgetSeconds: value };
|
|
109
|
+
changes.push("time budget");
|
|
110
|
+
});
|
|
111
|
+
if (timeBudgetError) return result(snapshot, false, timeBudgetError);
|
|
112
|
+
const minTokensError = applyOptionalPositiveInteger(input.minTokensBeforeWrapUp, (value) => {
|
|
113
|
+
next = { ...next, minTokensBeforeWrapUp: value };
|
|
114
|
+
changes.push("token floor");
|
|
115
|
+
});
|
|
116
|
+
if (minTokensError) return result(snapshot, false, minTokensError);
|
|
117
|
+
const minTimeError = applyOptionalPositiveInteger(input.minTimeSecondsBeforeWrapUp, (value) => {
|
|
118
|
+
next = { ...next, minTimeSecondsBeforeWrapUp: value };
|
|
119
|
+
changes.push("time floor");
|
|
120
|
+
});
|
|
121
|
+
if (minTimeError) return result(snapshot, false, minTimeError);
|
|
122
|
+
const floorError = validateFloors(next);
|
|
123
|
+
if (floorError) return result(snapshot, false, floorError);
|
|
124
|
+
if (input.status !== void 0) {
|
|
125
|
+
if (!["active", "paused", "complete", "budgetLimited"].includes(input.status)) {
|
|
126
|
+
return result(snapshot, false, "status must be active, paused, complete, or budgetLimited.");
|
|
127
|
+
}
|
|
128
|
+
if (input.status === "complete" && !floorMet(next)) {
|
|
129
|
+
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.");
|
|
130
|
+
}
|
|
131
|
+
next = transitionStatus(next, input.status);
|
|
132
|
+
changes.push(`status ${input.status}`);
|
|
133
|
+
}
|
|
134
|
+
if (next.status === "active" && budgetLimitReason(next)) {
|
|
135
|
+
return result(snapshot, false, "Cannot resume: budget is exhausted. Raise the budget or clear the goal before resuming.");
|
|
136
|
+
}
|
|
137
|
+
if (changes.length === 0) return result(snapshot, false, "No goal updates were provided.");
|
|
138
|
+
next = { ...next, updatedAt: Date.now() };
|
|
139
|
+
const updated = { ...snapshot, goal: next, updatedAt: next.updatedAt };
|
|
140
|
+
await this.writeSnapshot(updated);
|
|
141
|
+
return result(updated, true, `Goal updated: ${changes.join(", ")}.`);
|
|
142
|
+
}
|
|
143
|
+
async clearGoal() {
|
|
144
|
+
const snapshot = await this.readSnapshot();
|
|
145
|
+
const next = { ...snapshot, goal: null, updatedAt: Date.now() };
|
|
146
|
+
await this.writeSnapshot(next);
|
|
147
|
+
return result(next, true, snapshot.goal ? "Goal cleared." : "No goal was set.");
|
|
148
|
+
}
|
|
149
|
+
async enqueueGoal(input) {
|
|
150
|
+
const snapshot = await this.readSnapshot();
|
|
151
|
+
const validation = validateGoalInput(input);
|
|
152
|
+
if (validation) return result(snapshot, false, validation);
|
|
153
|
+
const queued = buildQueuedGoal(input);
|
|
154
|
+
const next = { ...snapshot, queue: [...snapshot.queue, queued], updatedAt: Date.now() };
|
|
155
|
+
await this.writeSnapshot(next);
|
|
156
|
+
return { ...result(next, true, "Queued goal."), queued: [queued] };
|
|
157
|
+
}
|
|
158
|
+
async enqueueGoalBlock(input, source) {
|
|
159
|
+
const snapshot = await this.readSnapshot();
|
|
160
|
+
const items = parseQueueBlockItems(input);
|
|
161
|
+
if (!items) return this.enqueueResolvedGoalInput(input, source);
|
|
162
|
+
const queued = [];
|
|
163
|
+
for (const item of items) {
|
|
164
|
+
const resolved = await this.resolveObjective(item.objectiveInput);
|
|
165
|
+
if (!resolved.ok) return result(snapshot, false, `Queue item ${item.marker} could not be resolved: ${resolved.message}`);
|
|
166
|
+
const validation = validateGoalInput(resolved.input);
|
|
167
|
+
if (validation) return result(snapshot, false, `Queue item ${item.marker}: ${validation}`);
|
|
168
|
+
queued.push(buildQueuedGoal({
|
|
169
|
+
...resolved.input,
|
|
170
|
+
source,
|
|
171
|
+
template: resolved.template,
|
|
172
|
+
templateFlags: resolved.templateFlags,
|
|
173
|
+
templateArgs: resolved.templateArgs
|
|
174
|
+
}));
|
|
175
|
+
}
|
|
176
|
+
const next = { ...snapshot, queue: [...snapshot.queue, ...queued], updatedAt: Date.now() };
|
|
177
|
+
await this.writeSnapshot(next);
|
|
178
|
+
return { ...result(next, true, `Queued ${queued.length} goals.`), queued };
|
|
179
|
+
}
|
|
180
|
+
async enqueueResolvedGoalInput(input, source) {
|
|
181
|
+
const resolved = await this.resolveObjective(input);
|
|
182
|
+
if (!resolved.ok) {
|
|
183
|
+
const snapshot = await this.readSnapshot();
|
|
184
|
+
return result(snapshot, false, resolved.message);
|
|
185
|
+
}
|
|
186
|
+
return this.enqueueGoal({
|
|
187
|
+
...resolved.input,
|
|
188
|
+
source,
|
|
189
|
+
template: resolved.template,
|
|
190
|
+
templateFlags: resolved.templateFlags,
|
|
191
|
+
templateArgs: resolved.templateArgs
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
async startQueuedGoal() {
|
|
195
|
+
const snapshot = await this.readSnapshot();
|
|
196
|
+
const current = snapshot.goal ? this.withLiveElapsed(snapshot.goal) : null;
|
|
197
|
+
if (current && current.status !== "complete" && current.status !== "budgetLimited") {
|
|
198
|
+
return result({ ...snapshot, goal: current }, false, "A non-terminal goal is already active. The queued goal was left in the queue.");
|
|
199
|
+
}
|
|
200
|
+
const nextQueued = snapshot.queue[0];
|
|
201
|
+
if (!nextQueued) return result({ ...snapshot, goal: current }, false, "No queued goals.");
|
|
202
|
+
let objective = nextQueued.objective;
|
|
203
|
+
if (nextQueued.template) {
|
|
204
|
+
const resolved = await resolveGoalTemplateByName(this.workspaceRoot, nextQueued.template, nextQueued.templateFlags ?? {}, nextQueued.templateArgs ?? "");
|
|
205
|
+
if (!resolved.ok) return result(snapshot, false, "notTemplate" in resolved ? `Unknown goal template '${nextQueued.template}'.` : resolved.error);
|
|
206
|
+
objective = resolved.template.objective;
|
|
207
|
+
}
|
|
208
|
+
const now = Date.now();
|
|
209
|
+
const goal = {
|
|
210
|
+
goalId: crypto.randomUUID(),
|
|
211
|
+
objective,
|
|
212
|
+
status: "active",
|
|
213
|
+
tokenBudget: nextQueued.tokenBudget,
|
|
214
|
+
timeBudgetSeconds: nextQueued.timeBudgetSeconds,
|
|
215
|
+
minTokensBeforeWrapUp: nextQueued.minTokensBeforeWrapUp,
|
|
216
|
+
minTimeSecondsBeforeWrapUp: nextQueued.minTimeSecondsBeforeWrapUp,
|
|
217
|
+
tokensUsed: 0,
|
|
218
|
+
timeUsedSeconds: 0,
|
|
219
|
+
createdAt: now,
|
|
220
|
+
updatedAt: now
|
|
221
|
+
};
|
|
222
|
+
const updated = { ...snapshot, goal, queue: snapshot.queue.slice(1), updatedAt: now };
|
|
223
|
+
await this.writeSnapshot(updated);
|
|
224
|
+
return { ...result(updated, true, "Started queued goal."), started: nextQueued, dequeued: nextQueued };
|
|
225
|
+
}
|
|
226
|
+
async dequeueGoal(audit) {
|
|
227
|
+
const snapshot = await this.readSnapshot();
|
|
228
|
+
if (!audit?.rationale?.trim() || !audit.authority?.trim()) {
|
|
229
|
+
return result(snapshot, false, "rationale and authority are required to dequeue a queued goal.");
|
|
230
|
+
}
|
|
231
|
+
const dequeued = snapshot.queue[0];
|
|
232
|
+
if (!dequeued) return result(snapshot, false, "No queued goals.");
|
|
233
|
+
const next = { ...snapshot, queue: snapshot.queue.slice(1), updatedAt: Date.now() };
|
|
234
|
+
await this.writeSnapshot(next);
|
|
235
|
+
return { ...result(next, true, "Dequeued goal."), dequeued };
|
|
236
|
+
}
|
|
237
|
+
async removeQueuedGoal(queueId) {
|
|
238
|
+
const snapshot = await this.readSnapshot();
|
|
239
|
+
const removed = snapshot.queue.find((item) => item.queueId === queueId);
|
|
240
|
+
if (!removed) return result(snapshot, false, `No queued goal found with id ${queueId}.`);
|
|
241
|
+
const next = { ...snapshot, queue: snapshot.queue.filter((item) => item.queueId !== queueId), updatedAt: Date.now() };
|
|
242
|
+
await this.writeSnapshot(next);
|
|
243
|
+
return { ...result(next, true, "Removed queued goal."), removed };
|
|
244
|
+
}
|
|
245
|
+
async recordTurnUsage(input) {
|
|
246
|
+
const snapshot = await this.readSnapshot();
|
|
247
|
+
if (!snapshot.goal) return result(snapshot, true, "No active goal.");
|
|
248
|
+
let goal = this.withLiveElapsed(snapshot.goal);
|
|
249
|
+
goal = {
|
|
250
|
+
...goal,
|
|
251
|
+
tokensUsed: goal.tokensUsed + Math.max(0, Math.floor(input.tokensUsed ?? 0)),
|
|
252
|
+
updatedAt: Date.now()
|
|
253
|
+
};
|
|
254
|
+
const limitReason = budgetLimitReason(goal);
|
|
255
|
+
if (limitReason) {
|
|
256
|
+
goal = transitionStatus(goal, "budgetLimited");
|
|
257
|
+
}
|
|
258
|
+
const next = { ...snapshot, goal, updatedAt: goal.updatedAt };
|
|
259
|
+
await this.writeSnapshot(next);
|
|
260
|
+
return result(next, true, limitReason ? `Goal budget limited: ${limitReason}.` : "Goal usage recorded.");
|
|
261
|
+
}
|
|
262
|
+
formatSnapshot(snapshot) {
|
|
263
|
+
const lines = [];
|
|
264
|
+
if (!snapshot.goal) {
|
|
265
|
+
lines.push("No goal is currently set.");
|
|
266
|
+
} else {
|
|
267
|
+
const goal = snapshot.goal;
|
|
268
|
+
lines.push(`Goal ${goal.goalId}`);
|
|
269
|
+
lines.push(`Status: ${goal.status}`);
|
|
270
|
+
lines.push(`Objective: ${goal.objective}`);
|
|
271
|
+
lines.push(`Elapsed: ${formatDuration(goal.timeUsedSeconds)}`);
|
|
272
|
+
lines.push(`Tokens: ${goal.tokensUsed}${goal.tokenBudget ? ` / ${goal.tokenBudget}` : ""}`);
|
|
273
|
+
if (goal.timeBudgetSeconds) lines.push(`Time budget: ${formatDuration(goal.timeBudgetSeconds)}`);
|
|
274
|
+
if (goal.minTokensBeforeWrapUp) lines.push(`Token floor: ${goal.minTokensBeforeWrapUp}`);
|
|
275
|
+
if (goal.minTimeSecondsBeforeWrapUp) lines.push(`Time floor: ${formatDuration(goal.minTimeSecondsBeforeWrapUp)}`);
|
|
276
|
+
}
|
|
277
|
+
if (snapshot.queue.length > 0) {
|
|
278
|
+
lines.push("");
|
|
279
|
+
lines.push(`Queued goals (${snapshot.queue.length}):`);
|
|
280
|
+
snapshot.queue.forEach((item, index) => {
|
|
281
|
+
lines.push(`${index + 1}. [${item.queueId}] ${truncate(item.objective, 120)}`);
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
return lines.join("\n");
|
|
285
|
+
}
|
|
286
|
+
async readSnapshot() {
|
|
287
|
+
const filePath = this.statePath();
|
|
288
|
+
if (!await fs.pathExists(filePath)) {
|
|
289
|
+
return emptySnapshot();
|
|
290
|
+
}
|
|
291
|
+
try {
|
|
292
|
+
const raw = await fs.readJson(filePath);
|
|
293
|
+
return normalizeSnapshot(raw);
|
|
294
|
+
} catch {
|
|
295
|
+
return emptySnapshot();
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
async writeSnapshot(snapshot) {
|
|
299
|
+
await fs.ensureDir(path.dirname(this.statePath()));
|
|
300
|
+
await fs.writeJson(this.statePath(), snapshot, { spaces: 2 });
|
|
301
|
+
}
|
|
302
|
+
statePath() {
|
|
303
|
+
return path.join(this.workspaceRoot, PROJECT_DIR_NAME, GOAL_STATE_FILE);
|
|
304
|
+
}
|
|
305
|
+
withLiveElapsed(goal) {
|
|
306
|
+
if (goal.status !== "active") return goal;
|
|
307
|
+
const elapsedDelta = Math.max(0, Math.floor((Date.now() - goal.updatedAt) / 1e3));
|
|
308
|
+
return { ...goal, timeUsedSeconds: goal.timeUsedSeconds + elapsedDelta };
|
|
309
|
+
}
|
|
310
|
+
};
|
|
311
|
+
function emptySnapshot() {
|
|
312
|
+
return { version: 1, goal: null, queue: [], updatedAt: Date.now() };
|
|
313
|
+
}
|
|
314
|
+
function normalizeSnapshot(raw) {
|
|
315
|
+
return {
|
|
316
|
+
version: 1,
|
|
317
|
+
goal: normalizeGoal(raw.goal),
|
|
318
|
+
queue: Array.isArray(raw.queue) ? raw.queue.map(normalizeQueuedGoal).filter((item) => Boolean(item)) : [],
|
|
319
|
+
updatedAt: typeof raw.updatedAt === "number" ? raw.updatedAt : Date.now()
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
function normalizeGoal(value) {
|
|
323
|
+
if (!value || typeof value !== "object") return null;
|
|
324
|
+
const raw = value;
|
|
325
|
+
if (typeof raw.goalId !== "string" || typeof raw.objective !== "string" || !isGoalStatus(raw.status)) return null;
|
|
326
|
+
return {
|
|
327
|
+
goalId: raw.goalId,
|
|
328
|
+
objective: raw.objective,
|
|
329
|
+
status: raw.status,
|
|
330
|
+
tokenBudget: positiveInteger(raw.tokenBudget),
|
|
331
|
+
timeBudgetSeconds: positiveInteger(raw.timeBudgetSeconds),
|
|
332
|
+
minTokensBeforeWrapUp: positiveInteger(raw.minTokensBeforeWrapUp),
|
|
333
|
+
minTimeSecondsBeforeWrapUp: positiveInteger(raw.minTimeSecondsBeforeWrapUp),
|
|
334
|
+
tokensUsed: positiveInteger(raw.tokensUsed) ?? 0,
|
|
335
|
+
timeUsedSeconds: positiveInteger(raw.timeUsedSeconds) ?? 0,
|
|
336
|
+
createdAt: typeof raw.createdAt === "number" ? raw.createdAt : Date.now(),
|
|
337
|
+
updatedAt: typeof raw.updatedAt === "number" ? raw.updatedAt : Date.now()
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
function normalizeQueuedGoal(value) {
|
|
341
|
+
if (!value || typeof value !== "object") return null;
|
|
342
|
+
const raw = value;
|
|
343
|
+
if (typeof raw.queueId !== "string" || typeof raw.objective !== "string") return null;
|
|
344
|
+
return {
|
|
345
|
+
queueId: raw.queueId,
|
|
346
|
+
objective: raw.objective,
|
|
347
|
+
tokenBudget: positiveInteger(raw.tokenBudget),
|
|
348
|
+
timeBudgetSeconds: positiveInteger(raw.timeBudgetSeconds),
|
|
349
|
+
minTokensBeforeWrapUp: positiveInteger(raw.minTokensBeforeWrapUp),
|
|
350
|
+
minTimeSecondsBeforeWrapUp: positiveInteger(raw.minTimeSecondsBeforeWrapUp),
|
|
351
|
+
source: raw.source === "command" || raw.source === "tool" || raw.source === "rpc" || raw.source === "cli" ? raw.source : "tool",
|
|
352
|
+
template: typeof raw.template === "string" ? raw.template : void 0,
|
|
353
|
+
templateFlags: isStringRecord(raw.templateFlags) ? raw.templateFlags : void 0,
|
|
354
|
+
templateArgs: typeof raw.templateArgs === "string" ? raw.templateArgs : void 0,
|
|
355
|
+
createdAt: typeof raw.createdAt === "number" ? raw.createdAt : Date.now()
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
function buildQueuedGoal(input) {
|
|
359
|
+
return {
|
|
360
|
+
queueId: `q-${Date.now()}-${crypto.randomUUID().slice(0, 8)}`,
|
|
361
|
+
objective: input.objective.trim(),
|
|
362
|
+
tokenBudget: input.tokenBudget,
|
|
363
|
+
timeBudgetSeconds: input.timeBudgetSeconds,
|
|
364
|
+
minTokensBeforeWrapUp: input.minTokensBeforeWrapUp,
|
|
365
|
+
minTimeSecondsBeforeWrapUp: input.minTimeSecondsBeforeWrapUp,
|
|
366
|
+
source: input.source,
|
|
367
|
+
template: input.template,
|
|
368
|
+
templateFlags: input.templateFlags,
|
|
369
|
+
templateArgs: input.templateArgs,
|
|
370
|
+
createdAt: Date.now()
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
function validateGoalInput(input) {
|
|
374
|
+
const objective = input.objective.trim();
|
|
375
|
+
if (!objective) return "objective must be non-empty.";
|
|
376
|
+
if (objective.length > MAX_OBJECTIVE_LENGTH) return `objective is too long (max ${MAX_OBJECTIVE_LENGTH} characters).`;
|
|
377
|
+
for (const [name, value] of [
|
|
378
|
+
["tokenBudget", input.tokenBudget],
|
|
379
|
+
["timeBudgetSeconds", input.timeBudgetSeconds],
|
|
380
|
+
["minTokensBeforeWrapUp", input.minTokensBeforeWrapUp],
|
|
381
|
+
["minTimeSecondsBeforeWrapUp", input.minTimeSecondsBeforeWrapUp]
|
|
382
|
+
]) {
|
|
383
|
+
if (value !== void 0 && (!Number.isInteger(value) || value <= 0)) return `${name} must be a positive integer.`;
|
|
384
|
+
}
|
|
385
|
+
return validateFloors(input);
|
|
386
|
+
}
|
|
387
|
+
function validateFloors(input) {
|
|
388
|
+
if (input.tokenBudget !== void 0 && input.minTokensBeforeWrapUp !== void 0 && input.minTokensBeforeWrapUp > input.tokenBudget) {
|
|
389
|
+
return "minTokensBeforeWrapUp cannot be greater than tokenBudget.";
|
|
390
|
+
}
|
|
391
|
+
if (input.timeBudgetSeconds !== void 0 && input.minTimeSecondsBeforeWrapUp !== void 0 && input.minTimeSecondsBeforeWrapUp > input.timeBudgetSeconds) {
|
|
392
|
+
return "minTimeSecondsBeforeWrapUp cannot be greater than timeBudgetSeconds.";
|
|
393
|
+
}
|
|
394
|
+
return null;
|
|
395
|
+
}
|
|
396
|
+
function transitionStatus(goal, status) {
|
|
397
|
+
const now = Date.now();
|
|
398
|
+
if (goal.status === "active" && status !== "active") {
|
|
399
|
+
const elapsedDelta = Math.max(0, Math.floor((now - goal.updatedAt) / 1e3));
|
|
400
|
+
return { ...goal, status, timeUsedSeconds: goal.timeUsedSeconds + elapsedDelta, updatedAt: now };
|
|
401
|
+
}
|
|
402
|
+
if (goal.status !== "active" && status === "active") {
|
|
403
|
+
return { ...goal, status, updatedAt: now };
|
|
404
|
+
}
|
|
405
|
+
return { ...goal, status, updatedAt: now };
|
|
406
|
+
}
|
|
407
|
+
function budgetLimitReason(goal) {
|
|
408
|
+
if (goal.tokenBudget !== void 0 && goal.tokensUsed >= goal.tokenBudget) return "tokenBudget";
|
|
409
|
+
if (goal.timeBudgetSeconds !== void 0 && goal.timeUsedSeconds >= goal.timeBudgetSeconds) return "timeBudget";
|
|
410
|
+
return null;
|
|
411
|
+
}
|
|
412
|
+
function applyOptionalPositiveInteger(value, apply) {
|
|
413
|
+
if (value === void 0) return null;
|
|
414
|
+
if (value === null) {
|
|
415
|
+
apply(void 0);
|
|
416
|
+
return null;
|
|
417
|
+
}
|
|
418
|
+
if (!Number.isInteger(value) || value <= 0) return "budget and floor values must be positive integers or null.";
|
|
419
|
+
apply(value);
|
|
420
|
+
return null;
|
|
421
|
+
}
|
|
422
|
+
function result(snapshot, ok, message) {
|
|
423
|
+
const goal = snapshot.goal;
|
|
424
|
+
return {
|
|
425
|
+
ok,
|
|
426
|
+
goal,
|
|
427
|
+
queue: snapshot.queue,
|
|
428
|
+
message,
|
|
429
|
+
telemetry: goal ? {
|
|
430
|
+
timeRemainingSeconds: goal.timeBudgetSeconds !== void 0 ? Math.max(0, goal.timeBudgetSeconds - goal.timeUsedSeconds) : void 0,
|
|
431
|
+
tokensRemaining: goal.tokenBudget !== void 0 ? Math.max(0, goal.tokenBudget - goal.tokensUsed) : void 0,
|
|
432
|
+
completionFloorMet: floorMet(goal)
|
|
433
|
+
} : void 0
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
function floorMet(goal) {
|
|
437
|
+
const tokenMet = goal.minTokensBeforeWrapUp === void 0 || goal.tokensUsed >= goal.minTokensBeforeWrapUp;
|
|
438
|
+
const timeMet = goal.minTimeSecondsBeforeWrapUp === void 0 || goal.timeUsedSeconds >= goal.minTimeSecondsBeforeWrapUp;
|
|
439
|
+
return tokenMet && timeMet;
|
|
440
|
+
}
|
|
441
|
+
function positiveInteger(value) {
|
|
442
|
+
return typeof value === "number" && Number.isInteger(value) && value >= 0 ? value : void 0;
|
|
443
|
+
}
|
|
444
|
+
function isGoalStatus(value) {
|
|
445
|
+
return value === "active" || value === "paused" || value === "budgetLimited" || value === "complete";
|
|
446
|
+
}
|
|
447
|
+
function isStringRecord(value) {
|
|
448
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return false;
|
|
449
|
+
return Object.values(value).every((entry) => typeof entry === "string");
|
|
450
|
+
}
|
|
451
|
+
function truncate(value, max) {
|
|
452
|
+
return value.length > max ? `${value.slice(0, max - 3)}...` : value;
|
|
453
|
+
}
|
|
454
|
+
function formatDuration(seconds) {
|
|
455
|
+
const whole = Math.max(0, Math.floor(seconds));
|
|
456
|
+
const minutes = Math.floor(whole / 60);
|
|
457
|
+
const secs = whole % 60;
|
|
458
|
+
return minutes > 0 ? `${minutes}m ${secs}s` : `${secs}s`;
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
export {
|
|
462
|
+
GoalManager
|
|
463
|
+
};
|
|
464
|
+
/**
|
|
465
|
+
* @license
|
|
466
|
+
* Copyright 2025 Autohand AI LLC
|
|
467
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
468
|
+
*/
|