autohand-cli 0.8.3 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +191 -74
- package/dist/{AgentRegistry-ODDXPAFR.js → AgentRegistry-GOV7FN2O.js} +2 -2
- package/dist/AgentRegistry-J2C6JBZ3.cjs +10 -0
- package/dist/{AutomodeManager-EOVHGRPP.js → AutomodeManager-APLLPEYJ.js} +31 -17
- package/dist/{AutomodeManager-6ATBE7Q5.cjs → AutomodeManager-MPSXT2RH.cjs} +38 -24
- package/dist/CommunitySkillsCache-22BB3J6H.cjs +8 -0
- package/dist/{CommunitySkillsCache-QLE57BN5.js → CommunitySkillsCache-ZACDPD4J.js} +2 -2
- package/dist/GitHubRegistryFetcher-CYJLF2XL.cjs +7 -0
- package/dist/{GitHubRegistryFetcher-NT5GFZXS.js → GitHubRegistryFetcher-J2BWPXJF.js} +1 -1
- package/dist/{HookManager-B2F35M27.js → HookManager-2S6AHOC3.js} +1 -1
- package/dist/{HookManager-PFAFE3FK.cjs → HookManager-TVEQI5ZU.cjs} +2 -2
- package/dist/{ImportWizard-OHRKBANZ.js → ImportWizard-AEBMAKXE.js} +33 -9
- package/dist/{ImportWizard-CJRZPPHL.cjs → ImportWizard-AF2XL6DS.cjs} +37 -13
- package/dist/LearnAdvisor-KKEQ5QCV.js +9 -0
- package/dist/LearnAdvisor-Q7RAYLPF.cjs +9 -0
- package/dist/{McpClientManager-NQ3EW2IF.cjs → McpClientManager-BNSKLHIN.cjs} +2 -2
- package/dist/{McpClientManager-VBIMGKXU.js → McpClientManager-SL35BR24.js} +1 -1
- package/dist/MemoryManager-PMNAEZMB.cjs +8 -0
- package/dist/{MemoryManager-2LAT7IHS.js → MemoryManager-QZRLTUB5.js} +2 -2
- package/dist/NVIDIAProvider-C3FWQOBZ.cjs +14 -0
- package/dist/NVIDIAProvider-SJPY3ONR.js +14 -0
- package/dist/{PermissionManager-7NQHRCHY.js → PermissionManager-MT7KBNNR.js} +3 -3
- package/dist/PermissionManager-URCNP5EC.cjs +11 -0
- package/dist/{ProjectProfiler-UG42W6WD.cjs → ProjectProfiler-CDAE7ECW.cjs} +1 -0
- package/dist/{ProjectProfiler-P4QJQWWA.js → ProjectProfiler-NZTJDRHD.js} +1 -0
- package/dist/ProviderFactory-56N3ECE4.cjs +12 -0
- package/dist/{ProviderFactory-2IYJ5OPW.js → ProviderFactory-RB4RVAF6.js} +4 -1
- package/dist/SessionManager-2IZGWASQ.cjs +10 -0
- package/dist/{SessionManager-4U4JFQ3C.js → SessionManager-554PHVPC.js} +2 -2
- package/dist/SkillsRegistry-GMRVONOQ.cjs +9 -0
- package/dist/{SkillsRegistry-RFEINXRT.js → SkillsRegistry-NHHMIUYJ.js} +2 -2
- package/dist/SubAgent-4GOR2FIJ.js +13 -0
- package/dist/SubAgent-ZJMDH4FI.cjs +13 -0
- package/dist/{SyncApiClient-B5RT2ECG.js → SyncApiClient-G3FM65IV.js} +1 -1
- package/dist/SyncApiClient-ODBDECOG.cjs +11 -0
- package/dist/about-3USFSGOH.js +15 -0
- package/dist/about-QR52U5DD.cjs +15 -0
- package/dist/acp-5Y2W6OZP.js +1556 -0
- package/dist/acp-GSYE75OB.cjs +1556 -0
- package/dist/actionExecutor-KHUU3Z3Q.cjs +28 -0
- package/dist/actionExecutor-PLQJZLZV.js +28 -0
- package/dist/add-dir-BTAD5OZS.cjs +11 -0
- package/dist/{add-dir-TUJM3PG5.js → add-dir-HCERJDBR.js} +3 -2
- package/dist/agent-B3EVT7NN.cjs +126 -0
- package/dist/agent-SATQ3WZ3.js +126 -0
- package/dist/agents/builtin/code-cleaner.md +1 -1
- package/dist/agents/builtin/docs-writer.md +1 -1
- package/dist/agents/builtin/researcher.md +2 -2
- package/dist/agents/builtin/reviewer.md +1 -1
- package/dist/agents/builtin/tester.md +1 -1
- package/dist/agents/builtin/todo-resolver.md +1 -1
- 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-LQEVQFIH.js → autoSkill-66PKCYTW.js} +2 -2
- package/dist/autoSkill-VQLGBELN.cjs +20 -0
- package/dist/automode-45DWV4TN.cjs +10 -0
- package/dist/{automode-R6P3VHLS.js → automode-BUF3VGXU.js} +2 -2
- package/dist/browserToolBridge-BXRQB4B4.cjs +58 -0
- package/dist/browserToolBridge-F5N66PE7.js +58 -0
- package/dist/chrome-Q2U73HZB.cjs +50 -0
- package/dist/chrome-Q54OALOK.cjs +21 -0
- package/dist/chrome-Y3T7EIHG.js +50 -0
- package/dist/chrome-ZNJ46OYW.js +21 -0
- package/dist/chromeSkill-53TH55PM.js +105 -0
- package/dist/chromeSkill-THW7N4IY.cjs +105 -0
- package/dist/{chunk-HXGBSJL5.cjs → chunk-22SCR3EV.cjs} +2 -2
- package/dist/chunk-26G7YGOW.js +367 -0
- package/dist/{chunk-3L53OA4E.cjs → chunk-2ESQR35E.cjs} +10 -10
- package/dist/chunk-2H5O745H.js +63 -0
- package/dist/{chunk-ULDM2SNB.js → chunk-2IW5YFJ4.js} +48 -47
- package/dist/{chunk-U55TWFJI.cjs → chunk-2VHB43IX.cjs} +24 -6
- package/dist/chunk-3EDDDZS2.cjs +5 -0
- package/dist/{chunk-X5VSP65C.cjs → chunk-3ICORF7M.cjs} +4 -4
- package/dist/chunk-3OF56EMA.cjs +197 -0
- package/dist/chunk-3UC6DMFI.cjs +93 -0
- package/dist/{chunk-64H4FRM3.cjs → chunk-3UHRCHKB.cjs} +32 -34
- package/dist/{chunk-JCLYQ2JC.js → chunk-3ZOOH44N.js} +12 -6
- package/dist/{chunk-TUD3Z3BD.js → chunk-44ZWOBTI.js} +136 -55
- package/dist/chunk-4567QNRB.js +444 -0
- package/dist/chunk-45CHNQM6.cjs +517 -0
- package/dist/chunk-46MTALKD.js +44 -0
- package/dist/{chunk-WHE2SWHU.js → chunk-4E7SHPNQ.js} +2 -2
- package/dist/chunk-4LMUDS2K.js +124 -0
- package/dist/{chunk-W7RYQJLO.cjs → chunk-4XFHP2SN.cjs} +46 -15
- package/dist/chunk-4XVLNOFA.js +360 -0
- package/dist/{chunk-GBHDROGL.js → chunk-575PXZX7.js} +16 -4
- package/dist/chunk-5A7ZL64N.js +139 -0
- package/dist/chunk-5GCQ5UMV.cjs +85 -0
- package/dist/chunk-5JTTM5SC.js +59 -0
- package/dist/{chunk-IETRBBMP.cjs → chunk-5K3CDSWZ.cjs} +108 -31
- package/dist/{chunk-KLWJIPU2.cjs → chunk-5SFV2NCY.cjs} +20 -16
- package/dist/chunk-5ZNYX4VH.cjs +71 -0
- package/dist/{chunk-A4IJHHV7.cjs → chunk-63ANVAOJ.cjs} +52 -11
- package/dist/{chunk-MYISNQH4.js → chunk-65LRPW5W.js} +1 -1
- package/dist/chunk-6AYJCDTA.js +360 -0
- package/dist/{chunk-X2MSVKDV.js → chunk-6HF6XSCC.js} +2 -2
- package/dist/{chunk-AEJH23FO.cjs → chunk-6JWCGQJU.cjs} +6 -6
- package/dist/chunk-6OECOAK5.cjs +360 -0
- package/dist/chunk-6R25D2H5.js +121 -0
- package/dist/chunk-7DJJGKM6.js +77 -0
- package/dist/{chunk-VG34MG2U.js → chunk-7IRQ7JEH.js} +9 -6
- package/dist/chunk-7MY4JHER.js +27 -0
- package/dist/chunk-7PJKTSRN.js +152 -0
- package/dist/{chunk-SKYG33B2.cjs → chunk-7PT646AL.cjs} +3 -3
- package/dist/chunk-7WAUCLLQ.js +229 -0
- package/dist/{chunk-U46VYPLR.cjs → chunk-7XTUL7ZD.cjs} +9 -9
- package/dist/chunk-AE2ILW25.cjs +152 -0
- package/dist/{chunk-T2M64VHA.cjs → chunk-AOKXYGBQ.cjs} +61 -41
- package/dist/chunk-AQ5PVHOC.cjs +113 -0
- package/dist/{chunk-N2BLVUPM.cjs → chunk-AZ47LKD5.cjs} +3 -3
- package/dist/chunk-B4HSNOIH.cjs +354 -0
- package/dist/chunk-B76FJKEJ.cjs +184 -0
- package/dist/chunk-BP37FVBM.js +85 -0
- package/dist/chunk-BQU3HAE7.js +21 -0
- package/dist/chunk-BYE7RQFZ.cjs +121 -0
- package/dist/chunk-C46B72VK.js +1034 -0
- package/dist/{chunk-HIVRCQS2.js → chunk-C5QIQQ37.js} +56 -25
- package/dist/chunk-CCIDL4SA.js +19931 -0
- package/dist/{chunk-XVUHNWMX.js → chunk-CECH6QQP.js} +17 -19
- package/dist/chunk-CFAWTLSC.js +13 -0
- package/dist/{chunk-ZYQMLKOK.cjs → chunk-CK4HAHVY.cjs} +212 -70
- package/dist/chunk-CO2AADYU.cjs +360 -0
- package/dist/chunk-CRTCZ4WL.cjs +19931 -0
- package/dist/chunk-CSTUTDTH.js +75 -0
- package/dist/{chunk-K2C56QGS.cjs → chunk-D546G7DA.cjs} +1650 -479
- package/dist/{chunk-CNBKZEX5.cjs → chunk-DA7NBAJK.cjs} +49 -17
- package/dist/{chunk-G4CAKI3V.js → chunk-DGBPWODD.js} +7 -2
- package/dist/chunk-DHUQZ53B.cjs +29 -0
- package/dist/{chunk-RGR6ME5J.cjs → chunk-DI57A4BX.cjs} +25 -28
- package/dist/{chunk-5K6NGAVM.js → chunk-DNSD7DVJ.js} +67 -52
- package/dist/{chunk-RDF37HKB.cjs → chunk-DSSCERHI.cjs} +3 -2
- package/dist/{chunk-NAJ4IZKD.cjs → chunk-EA2MS25U.cjs} +8 -6
- package/dist/{chunk-SJAVBCOA.js → chunk-EEHWALXA.js} +94 -3
- package/dist/chunk-ES2HJQ4N.js +37 -0
- package/dist/{chunk-G27PQQFD.js → chunk-EYHKL4QC.js} +1 -1
- package/dist/{chunk-SV2WA57F.js → chunk-FBQJZKFX.js} +38 -15
- package/dist/chunk-FFBDRUO5.cjs +59 -0
- package/dist/{chunk-N7LI55V4.js → chunk-FFHSCM5M.js} +15 -8
- package/dist/{chunk-SAHBLB3E.js → chunk-FP46B4X3.js} +208 -3
- package/dist/chunk-FQVG6ZHF.js +197 -0
- package/dist/{chunk-J2GSFVUV.cjs → chunk-GAOPJ5S3.cjs} +74 -59
- package/dist/{chunk-S52YW5ZQ.js → chunk-GNBBIAMD.js} +16 -19
- package/dist/chunk-GSDV75A5.js +715 -0
- package/dist/chunk-GWY26SUD.cjs +63 -0
- package/dist/{chunk-TUAITHWL.js → chunk-H426KOGY.js} +2 -1
- package/dist/{chunk-EZMINVLU.js → chunk-H4D2Q2AL.js} +5 -2
- package/dist/chunk-HC2Q6A3E.cjs +4967 -0
- package/dist/{chunk-3WVJEL7K.cjs → chunk-HDK2EHVH.cjs} +3 -1
- package/dist/{chunk-5IXII4HX.cjs → chunk-HG3ZASBH.cjs} +23 -16
- package/dist/chunk-HK5A54AV.cjs +280 -0
- package/dist/{chunk-LQGVEP3E.js → chunk-HQUSEWT4.js} +45 -13
- package/dist/chunk-HSWWM6AM.js +2340 -0
- package/dist/chunk-HTU4W3GB.js +183 -0
- package/dist/{chunk-HLHTG5ZU.cjs → chunk-HVCIB4SW.cjs} +14 -12
- package/dist/chunk-HXHE2KAO.js +385 -0
- package/dist/{chunk-LJFUXC56.cjs → chunk-HXQREVTA.cjs} +9 -6
- package/dist/{chunk-SLQAYV3W.js → chunk-HZWU6IO3.js} +11 -2
- package/dist/chunk-I2ZK3AOD.js +866 -0
- package/dist/chunk-IEPLQ47J.js +719 -0
- package/dist/chunk-J5HE6CUM.cjs +124 -0
- package/dist/{chunk-LIEXWM2M.js → chunk-JAQO6XDB.js} +19 -1
- package/dist/chunk-JB3JCYBJ.js +113 -0
- package/dist/chunk-JCUHCH37.cjs +247 -0
- package/dist/{chunk-FPHU2ES6.cjs → chunk-JM3ZTQUK.cjs} +19 -9
- package/dist/{chunk-NDMIPTV4.js → chunk-JMJRFSNJ.js} +8 -3
- package/dist/{chunk-ZLSGXMGQ.js → chunk-JMN3GZU6.js} +2 -0
- package/dist/chunk-JPFRI4L4.js +4967 -0
- package/dist/{chunk-BVKXEQVG.cjs → chunk-JV5HVCHU.cjs} +22 -10
- package/dist/chunk-KA2U6MY2.js +388 -0
- package/dist/{chunk-SEKD5FH3.cjs → chunk-KASXKDF2.cjs} +8 -3
- package/dist/chunk-KJ26T7GM.cjs +367 -0
- package/dist/chunk-KM7R5YPS.cjs +385 -0
- package/dist/{chunk-MBBY4ZIK.js → chunk-KMP6Y3LJ.js} +4 -1
- package/dist/chunk-KWXGDSYT.js +184 -0
- package/dist/{chunk-C5IJIM2V.cjs → chunk-L46OUKW5.cjs} +68 -37
- package/dist/{chunk-6UJMCWRY.js → chunk-L6OH44HL.js} +19 -9
- package/dist/chunk-LANGD5CO.js +280 -0
- package/dist/{chunk-APIXPPMT.js → chunk-LEZEWKPA.js} +1004 -39
- package/dist/{chunk-ULQ6MDSJ.cjs → chunk-LFDPTJYF.cjs} +43 -35
- package/dist/chunk-LJD7KR3L.cjs +44 -0
- package/dist/{chunk-NCC6ETZS.js → chunk-LUMV3DB2.js} +41 -33
- package/dist/{chunk-QXH5RCFI.js → chunk-M5DK524Z.js} +2 -2
- package/dist/chunk-M7B7RRBK.cjs +1034 -0
- package/dist/chunk-MANJ67D3.js +3897 -0
- package/dist/{chunk-HPHJ73GU.cjs → chunk-MGNXABSU.cjs} +9 -9
- package/dist/{chunk-6ZCULLCA.js → chunk-MMKZSJUN.js} +1 -1
- package/dist/{chunk-DVUHHH3B.cjs → chunk-MQQH4XQH.cjs} +4 -4
- package/dist/chunk-MUNUUFU7.cjs +21 -0
- package/dist/{chunk-DVZOENQ7.cjs → chunk-MZN6JBRZ.cjs} +9 -4
- package/dist/{chunk-OOKY3HPZ.js → chunk-NB6M6ESM.js} +50 -9
- package/dist/{chunk-BYONM7UM.js → chunk-NBGOIFKP.js} +265 -18
- package/dist/chunk-NHWHEW7M.cjs +75 -0
- package/dist/chunk-NQZH5CR2.cjs +468 -0
- package/dist/{chunk-EGPXJERY.cjs → chunk-NV6LCD2I.cjs} +119 -28
- package/dist/chunk-NVATU4V6.cjs +44 -0
- package/dist/{chunk-YZXUDM5X.js → chunk-NZ3ZWLUW.js} +204 -62
- package/dist/chunk-NZ7GCK7Y.cjs +92 -0
- package/dist/{chunk-VEKDGU2Q.cjs → chunk-NZQFKXM3.cjs} +49 -25
- package/dist/chunk-O5GI6SR3.js +59 -0
- package/dist/{chunk-56SWIDEL.cjs → chunk-OCATAKXV.cjs} +57 -56
- package/dist/{chunk-SKV2F3NM.js → chunk-OIGYWOL6.js} +1 -1
- package/dist/{chunk-IFFXSTOM.cjs → chunk-ONVYXTUT.cjs} +3 -3
- package/dist/chunk-OR67YXQK.cjs +13 -0
- package/dist/chunk-OV3T5MUH.cjs +715 -0
- package/dist/{chunk-OHUZKDGX.js → chunk-P4FUTSVK.js} +3 -3
- package/dist/chunk-P6SLT2F4.cjs +139 -0
- package/dist/{chunk-TNZRZQ7Q.js → chunk-PB7W7R72.js} +3 -78
- package/dist/chunk-PCM3N3CL.cjs +37 -0
- package/dist/{chunk-2AA5MFES.js → chunk-PGFLPURU.js} +8 -5
- package/dist/{chunk-DJDE4DTT.cjs → chunk-PIXQ2AVM.cjs} +25 -19
- package/dist/chunk-PNIAIOMZ.cjs +229 -0
- package/dist/{chunk-HTLINWX6.cjs → chunk-PQBYFEBL.cjs} +16 -13
- package/dist/{chunk-22D2CNTP.cjs → chunk-PSAH4ZQB.cjs} +5 -2
- package/dist/{chunk-3VTAFAL2.js → chunk-PTTZI4QZ.js} +16 -12
- package/dist/{chunk-WPVWQSL7.cjs → chunk-PY73W5MQ.cjs} +16 -13
- package/dist/{chunk-EGMZDTSL.js → chunk-PZZMIYII.js} +10 -2
- package/dist/{chunk-HBZU3RBZ.js → chunk-Q3BS6FPM.js} +34 -10
- package/dist/chunk-QBYGMMDD.js +517 -0
- package/dist/chunk-QLZOMZO5.cjs +388 -0
- package/dist/{chunk-ADUFCS4Q.cjs → chunk-QQ64HEHP.cjs} +160 -79
- package/dist/{chunk-L3TWPROA.js → chunk-QRQF3556.js} +44 -24
- package/dist/{chunk-YHD6TUIR.cjs → chunk-QW2RW2GY.cjs} +2 -0
- package/dist/chunk-RAKO7UN7.js +114 -0
- package/dist/{chunk-7TQH3CL4.cjs → chunk-RBXBH6EB.cjs} +78 -35
- package/dist/chunk-RFUKZIJF.cjs +78 -0
- package/dist/chunk-RS2E32YB.js +71 -0
- package/dist/{chunk-OLSBBZW6.cjs → chunk-S5JNQIGL.cjs} +5 -5
- package/dist/{chunk-FTYY5JJD.js → chunk-S5QKRA2V.js} +2 -2
- package/dist/chunk-SD3NTC7D.cjs +77 -0
- package/dist/{chunk-KPELYZ6L.js → chunk-SDLY4X3G.js} +2 -2
- package/dist/{chunk-IDFF5J2E.js → chunk-SFFEKZGC.js} +38 -7
- package/dist/{chunk-EGFT4PGW.js → chunk-SHRLFX6F.js} +8 -3
- package/dist/{chunk-3WICOC33.js → chunk-SNDDZG5H.js} +124 -84
- package/dist/{chunk-CZXGCVTR.cjs → chunk-SOVR7S3T.cjs} +2 -2
- package/dist/chunk-SPQ7QIQ6.js +78 -0
- package/dist/{chunk-XRZEUWKF.js → chunk-SRMGWMQO.js} +1 -1
- package/dist/{chunk-R33VKSH5.cjs → chunk-SVVP4UUZ.cjs} +11 -11
- package/dist/{chunk-7BTSG4ME.cjs → chunk-SY2P3Z5W.cjs} +1004 -39
- package/dist/chunk-SZD45IDG.js +468 -0
- package/dist/{chunk-3O3MOK5C.cjs → chunk-TE4SYTWR.cjs} +1114 -142
- package/dist/chunk-TH26BQJG.js +101 -0
- package/dist/{chunk-QNGEW5TC.js → chunk-TR6NECEZ.js} +1 -1
- package/dist/{chunk-YGN4CQIP.js → chunk-TYBPTKFT.js} +1 -1
- package/dist/{chunk-GJH7XMSK.js → chunk-U2QUMKCB.js} +8 -6
- package/dist/{chunk-47CKWKEX.cjs → chunk-U6PLSPMD.cjs} +9 -4
- package/dist/chunk-UOQECODR.js +34 -0
- package/dist/chunk-UR27UDTB.js +354 -0
- package/dist/chunk-UWZ4G3SQ.js +93 -0
- package/dist/{chunk-Y72HH2TF.cjs → chunk-V3SZLWEQ.cjs} +33 -24
- package/dist/chunk-V4HGZSKQ.cjs +183 -0
- package/dist/{chunk-3PDTTAKJ.js → chunk-V5ELP2XE.js} +19 -12
- package/dist/{chunk-3K2ESU53.cjs → chunk-VKOXFT4L.cjs} +2 -2
- package/dist/{chunk-XTB6VJVQ.cjs → chunk-VLGGMQUN.cjs} +6 -6
- package/dist/chunk-VQHSYAPZ.cjs +3897 -0
- package/dist/chunk-VUGOOGHB.js +400 -0
- package/dist/chunk-W5QLA6WP.cjs +866 -0
- package/dist/chunk-WBU4Q4GS.cjs +400 -0
- package/dist/{chunk-KWXVKLQ5.cjs → chunk-WGNMOVMT.cjs} +7 -82
- package/dist/chunk-WJYFLQ7G.cjs +27 -0
- package/dist/{chunk-RKJTGGMU.cjs → chunk-WKRDBCP2.cjs} +221 -16
- package/dist/{chunk-ZSPXQYG2.js → chunk-WNJXIACY.js} +7 -5
- package/dist/{chunk-AYS2ASM7.js → chunk-WPE2XHVX.js} +1 -1
- package/dist/chunk-WTB7AFL6.cjs +101 -0
- package/dist/{chunk-JYTDYJVW.js → chunk-X3TI5TJJ.js} +1 -1
- package/dist/chunk-X5P6QQOB.cjs +719 -0
- package/dist/{chunk-245KJE5Y.cjs → chunk-X7XMITIL.cjs} +14 -6
- package/dist/chunk-XF2WIKHR.cjs +34 -0
- package/dist/{chunk-DV2ZHK7B.cjs → chunk-XNIMSVS6.cjs} +49 -26
- package/dist/chunk-XW3XCK4E.cjs +59 -0
- package/dist/{chunk-N23UAW4I.js → chunk-XZVDYC5U.js} +7 -2
- package/dist/chunk-Y5BDE24P.cjs +444 -0
- package/dist/{chunk-NAGQ2PDC.js → chunk-YC5OBZQU.js} +1604 -433
- package/dist/chunk-YISPVAXO.cjs +2340 -0
- package/dist/{chunk-KQGPTCQJ.js → chunk-YQDI753V.js} +68 -25
- package/dist/{chunk-UJ2JSM6H.js → chunk-YVQI26H4.js} +2 -0
- package/dist/{chunk-NNPAM4HC.cjs → chunk-YWH55BWK.cjs} +15 -6
- package/dist/{chunk-X2YOZQIP.cjs → chunk-YWTIXHU6.cjs} +266 -19
- package/dist/{chunk-XX2ZO7DS.js → chunk-YXM6SA7P.js} +25 -16
- package/dist/chunk-YZWE7XSM.js +5 -0
- package/dist/chunk-ZASDSY7P.cjs +114 -0
- package/dist/{chunk-2UC22DJU.js → chunk-ZNGRLCFQ.js} +30 -4
- package/dist/{chunk-KANW6OYC.cjs → chunk-ZNYZB7XY.cjs} +34 -8
- package/dist/{chunk-NA6WQDYW.js → chunk-ZPLCAXJW.js} +1088 -116
- package/dist/{chunk-7UOUW76C.js → chunk-ZQAT5VT5.js} +101 -24
- package/dist/chunk-ZUYYHKQA.js +44 -0
- package/dist/clear-QJXU25IF.cjs +12 -0
- package/dist/{clear-A3N4GK2S.js → clear-Y5TO3RZA.js} +3 -3
- package/dist/communityInstaller-LXMVKVAV.cjs +22 -0
- package/dist/{communityInstaller-LOP2EDH5.js → communityInstaller-RVL4STPS.js} +8 -5
- package/dist/completion-JX4T2ONW.cjs +17 -0
- package/dist/completion-SE3XYG74.js +17 -0
- package/dist/config-3224PRW4.cjs +21 -0
- package/dist/{config-HPJPKTO6.js → config-7KPHKFTP.js} +7 -4
- package/dist/{constants-LISJW3DD.js → constants-EJFAWJQI.js} +1 -1
- package/dist/constants-MCCGUU5F.cjs +21 -0
- package/dist/{defaultHooks-IHSJR2AX.cjs → defaultHooks-2V2CQL63.cjs} +25 -10
- package/dist/{defaultHooks-KUKHK3AG.js → defaultHooks-TMHDU3FS.js} +25 -10
- package/dist/export-BJVIDZC4.js +15 -0
- 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/fffSearchProvider-2YCNKOYD.js +412 -0
- package/dist/fffSearchProvider-W6627E2V.cjs +412 -0
- package/dist/{filesystem-Z7BWAWMZ.js → filesystem-L6DQKGWK.js} +3 -2
- package/dist/filesystem-PGUPCMVK.cjs +11 -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-GFQXNZOK.js → help-MLIROWKM.js} +2 -2
- package/dist/{history-E3N6BJP7.js → history-GQJ6RZD6.js} +2 -2
- package/dist/history-J4LUIOSI.cjs +14 -0
- package/dist/hooks-FSRIUS6A.cjs +18 -0
- package/dist/hooks-PPFHCF7T.js +18 -0
- package/dist/i18n-CI6VFXL5.cjs +33 -0
- package/dist/{i18n-SY7QRM22.js → i18n-Q7UZJRPL.js} +1 -1
- package/dist/ide-BUSVE54P.js +15 -0
- package/dist/ide-YR27BPGM.cjs +15 -0
- package/dist/immediateCommandRouter-MTEHZXQX.js +15 -0
- package/dist/immediateCommandRouter-ROXU3MWT.cjs +15 -0
- package/dist/{import-W7SVLSTC.js → import-3VBKI6BN.js} +3 -3
- package/dist/{import-ADI37ZUR.cjs → import-C7S6UJMW.cjs} +3 -3
- package/dist/import-DBK4OCDF.cjs +10 -0
- package/dist/{import-KGKKZ3B7.js → import-U47DXCA7.js} +2 -2
- package/dist/index.cjs +837 -23011
- package/dist/index.d.cts +95 -0
- package/dist/index.d.ts +95 -0
- package/dist/index.js +864 -23038
- package/dist/init-OXTYS72D.cjs +10 -0
- package/dist/{init-7MFK626E.js → init-Q2O4R42R.js} +2 -2
- package/dist/inkMode-VUE6ZDLD.cjs +7 -0
- package/dist/inkMode-WBNFOSAT.js +7 -0
- package/dist/inputPrompt-3CFZDUBH.js +90 -0
- 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-AH3MMUBU.js +21 -0
- package/dist/mcp-DW7R63IB.cjs +21 -0
- package/dist/{mcp-install-2FEROZTL.js → mcp-install-222PCKSW.js} +18 -10
- package/dist/{mcp-install-WM6BQRI5.cjs → mcp-install-IA4ZS2SV.cjs} +22 -14
- package/dist/memory-6NX3DAIY.cjs +10 -0
- package/dist/{memory-J73WZH2I.js → memory-VB46T5H3.js} +2 -2
- package/dist/model-64NAELFS.cjs +10 -0
- package/dist/{model-AES267IN.js → model-SJJG64AM.js} +2 -2
- package/dist/new-DU5SOOOY.cjs +12 -0
- package/dist/{new-5CLF3MKH.js → new-ERZ5C6CN.js} +3 -3
- package/dist/onboarding-2U2BV2KE.cjs +36 -0
- package/dist/onboarding-ZQXMPSMJ.js +36 -0
- package/dist/permissions-7ACNFK7A.js +10 -0
- package/dist/permissions-GSNNV7RJ.cjs +10 -0
- package/dist/plan-XEJMOT55.cjs +13 -0
- package/dist/{plan-65HMS5HQ.js → plan-YYUAXPTL.js} +3 -1
- package/dist/pr-review-CW6J7P62.cjs +9 -0
- package/dist/pr-review-YZSBQVT2.js +9 -0
- package/dist/{quit-XDZYRSPU.js → quit-WY6T267G.js} +2 -2
- package/dist/quit-XIRE2KRE.cjs +10 -0
- package/dist/rawMode-6W5AXAKI.cjs +7 -0
- package/dist/rawMode-GFNLXQPU.js +7 -0
- package/dist/{registry-PTHWERKC.js → registry-4DXUDKJN.js} +29 -44
- package/dist/{registry-IVT4G2RT.cjs → registry-UEO3ETZ7.cjs} +65 -80
- package/dist/repeat-P4FAPE3Y.cjs +17 -0
- package/dist/{repeat-EVCWUL6Z.js → repeat-RALE6AUO.js} +7 -3
- package/dist/resume-RQZ3WXBP.cjs +17 -0
- package/dist/resume-XSXZMDMD.js +17 -0
- package/dist/review-QHP2KP4Q.js +9 -0
- package/dist/review-UWHWQHCB.cjs +9 -0
- package/dist/ripgrep-67SCU2BA.cjs +9 -0
- package/dist/ripgrep-VHJQQ55W.js +9 -0
- package/dist/rpc-XH7QLN4H.js +3874 -0
- package/dist/rpc-YF54T7JU.cjs +3874 -0
- package/dist/search-VXXFGZWU.cjs +21 -0
- package/dist/search-YAWGX7P7.js +21 -0
- package/dist/{sessions-6GWEBMKS.js → sessions-NJYHJOEL.js} +2 -2
- package/dist/sessions-OSG3UJEZ.cjs +10 -0
- package/dist/settings-SO2UIGWV.cjs +42 -0
- package/dist/settings-ZXUQH3DO.js +42 -0
- 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-NBTNDVAY.js +29 -0
- package/dist/{skills-ZZCIAS7C.js → skills-OB6RDW7D.js} +10 -7
- package/dist/{skills-PG542VEB.cjs → skills-ZROBG3RZ.cjs} +13 -10
- package/dist/{skills-install-SRC3Z2MS.js → skills-install-BHTIEMKH.js} +21 -70
- package/dist/{skills-install-67DOBPJC.cjs → skills-install-ILX6QVEF.cjs} +34 -83
- 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/summarizer-DGPHE5IQ.js +17 -0
- package/dist/summarizer-JNXLUAQG.cjs +17 -0
- package/dist/sync-7C25MOT2.js +22 -0
- package/dist/{sync-VU2NSJ4O.js → sync-OCJN4ZSO.js} +3 -3
- package/dist/sync-XRP46IVG.cjs +40 -0
- package/dist/sync-ZMFVE7T4.cjs +22 -0
- package/dist/{teammate-SXRVXNQV.cjs → teammate-D77B6QRT.cjs} +31 -9
- package/dist/{teammate-SD26GR37.js → teammate-EZCMHOIL.js} +30 -8
- 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/tools-3PPTTKFV.js +9 -0
- package/dist/tools-THIQA7WC.cjs +9 -0
- package/dist/ui/questionModal.cjs +8 -5
- package/dist/ui/questionModal.js +7 -4
- package/dist/{undo-OL2EDBRY.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/dist/web-3BA2WV37.cjs +37 -0
- package/dist/web-6FYGBX5K.js +37 -0
- package/dist/workspaceSafety-MDJGHK6D.cjs +9 -0
- package/dist/workspaceSafety-XOUMUBVB.js +9 -0
- package/dist/yolo-GF2YD7ZI.js +9 -0
- package/dist/yolo-OGDA7HNC.cjs +9 -0
- package/dist/yoloMode-3DJDA75U.cjs +17 -0
- package/dist/yoloMode-4JOOSU26.js +17 -0
- package/package.json +51 -49
- package/dist/AgentRegistry-HRPN6ZOF.cjs +0 -10
- package/dist/CommunitySkillsCache-KE435RAR.cjs +0 -8
- package/dist/GitHubRegistryFetcher-I45SESIL.cjs +0 -7
- package/dist/LearnAdvisor-FLBA6FDD.js +0 -9
- package/dist/LearnAdvisor-GG3CXQF3.cjs +0 -9
- package/dist/MemoryManager-2LQPIYVE.cjs +0 -8
- package/dist/PermissionManager-X57BXHJ6.cjs +0 -11
- package/dist/ProviderFactory-KPJOGQWF.cjs +0 -9
- package/dist/SessionManager-YBJAZXNO.cjs +0 -10
- package/dist/SkillsRegistry-7O72A6TZ.cjs +0 -9
- package/dist/SubAgent-JT4HZHN7.js +0 -11
- package/dist/SubAgent-VPNYDWAU.cjs +0 -11
- package/dist/SyncApiClient-HQXJL5BT.cjs +0 -11
- package/dist/about-4DB5KTHW.js +0 -12
- package/dist/about-LXAOXZFT.cjs +0 -12
- package/dist/actionExecutor-23JB2WUC.js +0 -19
- package/dist/actionExecutor-X5UEZSKH.cjs +0 -19
- package/dist/add-dir-YC37DMSF.cjs +0 -10
- package/dist/agents-YF3BSUU5.js +0 -12
- package/dist/agents-ZOUHPMYR.cjs +0 -12
- package/dist/agents-new-HSH4GQPG.js +0 -14
- package/dist/agents-new-VYUDOCE7.cjs +0 -14
- package/dist/autoSkill-X5W52WOE.cjs +0 -20
- package/dist/automode-SJGM7VEI.cjs +0 -10
- package/dist/chunk-ALYU6VTM.js +0 -105
- package/dist/chunk-B53A2NM2.js +0 -2030
- package/dist/chunk-BJXSNT46.js +0 -100
- package/dist/chunk-CB4E2T5N.cjs +0 -312
- package/dist/chunk-DNUOXBHL.js +0 -539
- package/dist/chunk-EFX2QSZX.cjs +0 -33
- package/dist/chunk-GCXYXLRA.cjs +0 -111
- package/dist/chunk-H2ZRHQQV.js +0 -33
- package/dist/chunk-HNRPK5MY.cjs +0 -85
- package/dist/chunk-HVKOZ2VP.cjs +0 -115
- package/dist/chunk-JJLYWH5Y.cjs +0 -100
- package/dist/chunk-LWUJFGOZ.js +0 -115
- package/dist/chunk-MERYP6AM.cjs +0 -539
- package/dist/chunk-MZAPWNAC.cjs +0 -207
- package/dist/chunk-NTSDP2WB.js +0 -226
- package/dist/chunk-OUZQXMHL.cjs +0 -226
- package/dist/chunk-PGESAU2W.cjs +0 -2030
- package/dist/chunk-SYVYLZZF.cjs +0 -24
- package/dist/chunk-SZOLA6FR.js +0 -111
- package/dist/chunk-VWDHR4HV.js +0 -168
- package/dist/chunk-Y45G6ZO5.cjs +0 -168
- package/dist/chunk-YRLYSQEQ.cjs +0 -105
- package/dist/chunk-ZYVS43MU.js +0 -312
- package/dist/clear-GK4IEUUS.cjs +0 -12
- package/dist/communityInstaller-XXC7RLE4.cjs +0 -19
- package/dist/completion-HWABSAEL.js +0 -14
- package/dist/completion-IUUVQG4D.cjs +0 -14
- package/dist/config-HF7WOLZF.cjs +0 -18
- package/dist/constants-PEO3P2SJ.cjs +0 -21
- package/dist/export-QJAV2FCZ.js +0 -12
- package/dist/export-XSRFXGWU.cjs +0 -12
- package/dist/feedback-4TCIL3ML.cjs +0 -15
- package/dist/feedback-SJ6VVEY3.js +0 -15
- package/dist/filesystem-W56QZUJF.cjs +0 -10
- package/dist/help-ISBVQL3S.cjs +0 -12
- package/dist/history-XQ4GTSFU.cjs +0 -14
- package/dist/hooks-CJNKJ5PF.js +0 -13
- package/dist/hooks-UTMBTAXT.cjs +0 -13
- package/dist/i18n-N7QQ7A5M.cjs +0 -33
- package/dist/ide-RTA4UJV4.js +0 -12
- package/dist/ide-VWVOLIFF.cjs +0 -12
- package/dist/immediateCommandRouter-BW34JNXL.js +0 -9
- package/dist/immediateCommandRouter-SHOVNB5X.cjs +0 -9
- package/dist/import-ZLJVONXH.cjs +0 -10
- package/dist/init-TBKAB4LZ.cjs +0 -10
- package/dist/language-MDSHEXHB.cjs +0 -18
- package/dist/language-PXTQSHIG.js +0 -18
- package/dist/learn-623TW5EK.cjs +0 -20
- package/dist/learn-BCPV7GM2.js +0 -20
- package/dist/localProjectPermissions-BHQXEWZJ.cjs +0 -18
- package/dist/localProjectPermissions-GMOUYQM6.js +0 -18
- package/dist/login-QMVEETWJ.js +0 -20
- package/dist/login-QYMXAL3K.cjs +0 -20
- package/dist/logout-2CMTDAOJ.js +0 -18
- package/dist/logout-ZOHVZAUK.cjs +0 -18
- package/dist/mcp-IUVKK65S.js +0 -18
- package/dist/mcp-TXC7PYG3.cjs +0 -18
- package/dist/memory-WRIHDEPK.cjs +0 -10
- package/dist/model-RLP75SF5.cjs +0 -10
- package/dist/new-HLSFL6A4.cjs +0 -12
- package/dist/permissions-GP6FTGZ2.js +0 -13
- package/dist/permissions-O6EKKPOG.cjs +0 -13
- package/dist/plan-MCAXDIM2.cjs +0 -11
- package/dist/quit-TQX6GXA5.cjs +0 -10
- package/dist/repeat-BSPS5TWD.cjs +0 -13
- package/dist/resume-2GOPDLL4.cjs +0 -13
- package/dist/resume-37IUVDA6.js +0 -13
- package/dist/search-7KUSHIBL.cjs +0 -17
- package/dist/search-OJGDRIMA.js +0 -17
- package/dist/sessions-CYYCHSQG.cjs +0 -10
- package/dist/settings-2D7CAO66.cjs +0 -30
- package/dist/settings-BXR6SBJP.js +0 -30
- package/dist/share-BXQY5IQU.js +0 -14
- package/dist/share-OSFXZBGS.cjs +0 -14
- package/dist/skills-FL6O6AOM.cjs +0 -26
- package/dist/skills-PNKQZRNK.js +0 -26
- package/dist/skills-new-XFMEHHIF.cjs +0 -15
- package/dist/skills-new-ZNZPHUKS.js +0 -15
- package/dist/slashCommands-LLCNPK3X.js +0 -76
- package/dist/slashCommands-RXZZS6RE.cjs +0 -76
- package/dist/status-BCECUJXT.cjs +0 -11
- package/dist/status-EFO7MQU3.js +0 -11
- package/dist/sync-IJYJ6KKM.js +0 -18
- package/dist/sync-LFT6SBPF.cjs +0 -18
- package/dist/sync-U7SDPBNZ.cjs +0 -40
- package/dist/theme-AWBHSG7J.cjs +0 -18
- package/dist/theme-TQLBPJ2E.js +0 -18
- package/dist/undo-IBBGP7A2.cjs +0 -10
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
|
+
|
|
3
|
+
var _chunkNVATU4V6cjs = require('./chunk-NVATU4V6.cjs');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunkLJD7KR3Lcjs = require('./chunk-LJD7KR3L.cjs');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
var _chunkX5P6QQOBcjs = require('./chunk-X5P6QQOB.cjs');
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
var _chunkHK5A54AVcjs = require('./chunk-HK5A54AV.cjs');
|
|
13
|
+
|
|
14
|
+
// src/commands/usage.ts
|
|
15
|
+
var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs);
|
|
16
|
+
var _os = require('os'); var _os2 = _interopRequireDefault(_os);
|
|
17
|
+
var _path = require('path'); var _path2 = _interopRequireDefault(_path);
|
|
18
|
+
|
|
19
|
+
// src/core/context/types.ts
|
|
20
|
+
var CONTEXT_ENV_VARS = {
|
|
21
|
+
/** Enable/disable context compaction ('true' | 'false'). */
|
|
22
|
+
CONTEXT_COMPACT: "AUTOHAND_CONTEXT_COMPACT",
|
|
23
|
+
/** Override context window size (number). */
|
|
24
|
+
CONTEXT_WINDOW: "AUTOHAND_CONTEXT_WINDOW",
|
|
25
|
+
/** Tokens to reserve for model output (number). */
|
|
26
|
+
RESERVE_TOKENS: "AUTOHAND_RESERVE_TOKENS"
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
// src/core/context/tokenizer.ts
|
|
30
|
+
var MODEL_CONTEXT = {
|
|
31
|
+
"anthropic/claude-4-sonnet": 2e5,
|
|
32
|
+
"anthropic/claude-3-opus": 2e5,
|
|
33
|
+
"anthropic/claude-3-haiku": 2e5,
|
|
34
|
+
"anthropic/claude-opus-4": 2e5,
|
|
35
|
+
"anthropic/claude-opus-4-7": 1e6,
|
|
36
|
+
"openai/gpt-4o-mini": 128e3,
|
|
37
|
+
"openai/gpt-4o": 128e3,
|
|
38
|
+
"openai/gpt-4.1": 2e5,
|
|
39
|
+
"openai/o1": 2e5,
|
|
40
|
+
"openai/o1-mini": 128e3,
|
|
41
|
+
"tencent/hy3-preview:free": 262144,
|
|
42
|
+
"tencent/hy3-preview-20260421:free": 262144,
|
|
43
|
+
"deepseek/deepseek-r1": 64e3,
|
|
44
|
+
"deepseek/deepseek-r1-0528-qwen3-8b:free": 8e3,
|
|
45
|
+
"deepseek/deepseek-coder": 16e3
|
|
46
|
+
};
|
|
47
|
+
var SAFETY_MARGIN = 0.9;
|
|
48
|
+
var CONTEXT_WARNING_THRESHOLD = 0.8;
|
|
49
|
+
var CONTEXT_CRITICAL_THRESHOLD = 0.9;
|
|
50
|
+
function parseContextWindowOverride(value) {
|
|
51
|
+
if (typeof value !== "number" || !Number.isFinite(value) || value <= 0) {
|
|
52
|
+
return void 0;
|
|
53
|
+
}
|
|
54
|
+
return Math.floor(value);
|
|
55
|
+
}
|
|
56
|
+
function normalizeModelId(model) {
|
|
57
|
+
return model.trim().toLowerCase().replace(/^openai\//, "").replace(/^google\//, "").replace(/^deepseek\//, "");
|
|
58
|
+
}
|
|
59
|
+
function inferContextWindow(model) {
|
|
60
|
+
const normalized = normalizeModelId(model);
|
|
61
|
+
if (normalized.startsWith("gpt-5.5")) return 105e4;
|
|
62
|
+
if (normalized.startsWith("gpt-5.4") && !normalized.includes("mini") && !normalized.includes("nano")) return 105e4;
|
|
63
|
+
if (normalized.startsWith("gpt-5.4-mini") || normalized.startsWith("gpt-5.4-nano") || normalized.startsWith("gpt-5.3-codex") || normalized === "gpt-5" || normalized.startsWith("gpt-5-mini") || normalized.startsWith("gpt-5-nano")) {
|
|
64
|
+
return 4e5;
|
|
65
|
+
}
|
|
66
|
+
if (normalized.startsWith("gpt-5.3-chat")) return 128e3;
|
|
67
|
+
if (normalized.startsWith("gemini-3.1-flash-image")) return 128e3;
|
|
68
|
+
if (normalized.startsWith("gemini-3-pro-image")) return 65e3;
|
|
69
|
+
if (normalized.startsWith("gemini-3.1-pro") || normalized.startsWith("gemini-3.1-flash-lite") || normalized.startsWith("gemini-3-flash")) {
|
|
70
|
+
return 1e6;
|
|
71
|
+
}
|
|
72
|
+
if (normalized.startsWith("deepseek-v4")) return 1e6;
|
|
73
|
+
return void 0;
|
|
74
|
+
}
|
|
75
|
+
function getContextWindow(model, configuredContextWindow) {
|
|
76
|
+
const envOverride = process.env[CONTEXT_ENV_VARS.CONTEXT_WINDOW];
|
|
77
|
+
if (envOverride) {
|
|
78
|
+
const parsed = parseInt(envOverride, 10);
|
|
79
|
+
if (!isNaN(parsed) && parsed > 0) return parsed;
|
|
80
|
+
}
|
|
81
|
+
const configured = parseContextWindowOverride(configuredContextWindow);
|
|
82
|
+
if (configured) return configured;
|
|
83
|
+
const normalized = model.toLowerCase();
|
|
84
|
+
if (MODEL_CONTEXT[normalized]) {
|
|
85
|
+
return MODEL_CONTEXT[normalized];
|
|
86
|
+
}
|
|
87
|
+
const inferred = inferContextWindow(model);
|
|
88
|
+
if (inferred) return inferred;
|
|
89
|
+
const fuzzy = Object.entries(MODEL_CONTEXT).find(
|
|
90
|
+
([name]) => normalized.includes(name) || name.includes(_nullishCoalesce(normalized.split("/").pop(), () => ( "")))
|
|
91
|
+
);
|
|
92
|
+
return fuzzy ? fuzzy[1] : 128e3;
|
|
93
|
+
}
|
|
94
|
+
function getModelFamily(model) {
|
|
95
|
+
const normalized = model.toLowerCase();
|
|
96
|
+
if (normalized.includes("claude")) return "claude";
|
|
97
|
+
if (normalized.includes("gpt-4") || normalized.includes("gpt-5") || normalized.includes("o1") || normalized.includes("o3")) return "openai";
|
|
98
|
+
if (normalized.includes("gemini")) return "gemini";
|
|
99
|
+
if (normalized.includes("deepseek")) return "deepseek";
|
|
100
|
+
return "default";
|
|
101
|
+
}
|
|
102
|
+
function estimateTokens(text, modelFamily) {
|
|
103
|
+
if (!text) return 0;
|
|
104
|
+
const codeLikeChars = _nullishCoalesce(_optionalChain([text, 'access', _ => _.match, 'call', _2 => _2(/[{}[\]":\\]/g), 'optionalAccess', _3 => _3.length]), () => ( 0));
|
|
105
|
+
const codeLikeRatio = text.length > 200 && codeLikeChars >= 4 ? 0.65 : 1;
|
|
106
|
+
const baseRatio = {
|
|
107
|
+
openai: 4,
|
|
108
|
+
claude: 3.5,
|
|
109
|
+
gemini: 4,
|
|
110
|
+
deepseek: 3,
|
|
111
|
+
default: 3.5
|
|
112
|
+
};
|
|
113
|
+
const ratio = (_nullishCoalesce(baseRatio[_nullishCoalesce(modelFamily, () => ( "default"))], () => ( 3.5))) * codeLikeRatio;
|
|
114
|
+
return Math.ceil(text.length / ratio);
|
|
115
|
+
}
|
|
116
|
+
function estimateMessageTokens(message, modelFamily) {
|
|
117
|
+
const structureOverhead = 10;
|
|
118
|
+
let tokens = structureOverhead;
|
|
119
|
+
tokens += estimateTokens(_nullishCoalesce(message.content, () => ( "")), modelFamily);
|
|
120
|
+
if (message.tool_calls) {
|
|
121
|
+
for (const call of message.tool_calls) {
|
|
122
|
+
tokens += 5;
|
|
123
|
+
tokens += estimateTokens(call.function.name, modelFamily);
|
|
124
|
+
tokens += estimateTokens(call.function.arguments, modelFamily);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return tokens;
|
|
128
|
+
}
|
|
129
|
+
function estimateMessagesTokens(messages, modelFamily) {
|
|
130
|
+
return messages.reduce(
|
|
131
|
+
(acc, message) => acc + estimateMessageTokens(message, modelFamily),
|
|
132
|
+
0
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
function estimateToolsTokens(tools, modelFamily) {
|
|
136
|
+
if (!tools || tools.length === 0) return 0;
|
|
137
|
+
let tokens = 0;
|
|
138
|
+
for (const tool of tools) {
|
|
139
|
+
tokens += estimateTokens(tool.name, modelFamily);
|
|
140
|
+
tokens += estimateTokens(tool.description, modelFamily);
|
|
141
|
+
if (tool.parameters) {
|
|
142
|
+
const paramJson = JSON.stringify(tool.parameters);
|
|
143
|
+
tokens += estimateTokens(paramJson, modelFamily);
|
|
144
|
+
}
|
|
145
|
+
tokens += 35;
|
|
146
|
+
}
|
|
147
|
+
return tokens;
|
|
148
|
+
}
|
|
149
|
+
function calculateContextUsage(messages, tools, model, outputBudget = 16e3, configuredContextWindow) {
|
|
150
|
+
const envReserve = process.env[CONTEXT_ENV_VARS.RESERVE_TOKENS];
|
|
151
|
+
if (envReserve) {
|
|
152
|
+
const parsed = parseInt(envReserve, 10);
|
|
153
|
+
if (!isNaN(parsed) && parsed > 0) outputBudget = parsed;
|
|
154
|
+
}
|
|
155
|
+
const modelFamily = getModelFamily(model);
|
|
156
|
+
const messagesTokens = estimateMessagesTokens(messages, modelFamily);
|
|
157
|
+
const toolsTokens = estimateToolsTokens(tools, modelFamily);
|
|
158
|
+
const totalTokens = messagesTokens + toolsTokens;
|
|
159
|
+
const contextWindow = getContextWindow(model, configuredContextWindow);
|
|
160
|
+
const cappedOutputBudget = Math.min(outputBudget, Math.floor(contextWindow * 0.25));
|
|
161
|
+
const effectiveWindow = contextWindow - cappedOutputBudget;
|
|
162
|
+
const safeWindow = Math.floor(effectiveWindow * SAFETY_MARGIN);
|
|
163
|
+
const usagePercent = totalTokens / effectiveWindow;
|
|
164
|
+
return {
|
|
165
|
+
totalTokens,
|
|
166
|
+
messagesTokens,
|
|
167
|
+
toolsTokens,
|
|
168
|
+
contextWindow,
|
|
169
|
+
safeWindow,
|
|
170
|
+
usagePercent,
|
|
171
|
+
isWarning: usagePercent >= CONTEXT_WARNING_THRESHOLD,
|
|
172
|
+
isCritical: usagePercent >= CONTEXT_CRITICAL_THRESHOLD,
|
|
173
|
+
isExceeded: totalTokens >= safeWindow,
|
|
174
|
+
remainingTokens: Math.max(0, safeWindow - totalTokens)
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// src/commands/usage.ts
|
|
179
|
+
var USAGE_V2_FLAG = "usage_v2";
|
|
180
|
+
var metadata = {
|
|
181
|
+
command: "/usage",
|
|
182
|
+
description: "Show model, provider, context, and usage limits",
|
|
183
|
+
implemented: true
|
|
184
|
+
};
|
|
185
|
+
function clampPercent(value) {
|
|
186
|
+
if (!Number.isFinite(value)) return 100;
|
|
187
|
+
return Math.max(0, Math.min(100, Math.round(value)));
|
|
188
|
+
}
|
|
189
|
+
function formatPath(value) {
|
|
190
|
+
const home = _os2.default.homedir();
|
|
191
|
+
if (value === home) {
|
|
192
|
+
return "~";
|
|
193
|
+
}
|
|
194
|
+
if (value.startsWith(`${home}${_path2.default.sep}`)) {
|
|
195
|
+
return `~${value.slice(home.length)}`;
|
|
196
|
+
}
|
|
197
|
+
return value;
|
|
198
|
+
}
|
|
199
|
+
function formatCompactNumber(value) {
|
|
200
|
+
if (!Number.isFinite(value) || value < 0) {
|
|
201
|
+
return "0";
|
|
202
|
+
}
|
|
203
|
+
if (value >= 1e6) {
|
|
204
|
+
const millions = value / 1e6;
|
|
205
|
+
return `${Number.isInteger(millions) ? millions.toFixed(0) : millions.toFixed(1)}M`;
|
|
206
|
+
}
|
|
207
|
+
if (value >= 1e3) {
|
|
208
|
+
const thousands = value / 1e3;
|
|
209
|
+
return `${Number.isInteger(thousands) ? thousands.toFixed(0) : thousands.toFixed(1)}K`;
|
|
210
|
+
}
|
|
211
|
+
return String(Math.round(value));
|
|
212
|
+
}
|
|
213
|
+
function formatPermissionMode(mode) {
|
|
214
|
+
switch (_nullishCoalesce(mode, () => ( "interactive"))) {
|
|
215
|
+
case "interactive":
|
|
216
|
+
return "Workspace (on-request)";
|
|
217
|
+
case "unrestricted":
|
|
218
|
+
return "Workspace (full access)";
|
|
219
|
+
case "restricted":
|
|
220
|
+
return "Read-only (restricted)";
|
|
221
|
+
case "external":
|
|
222
|
+
return "External approval";
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
function resolveProviderSettings(config, provider) {
|
|
226
|
+
if (!config || !provider) {
|
|
227
|
+
return void 0;
|
|
228
|
+
}
|
|
229
|
+
return _nullishCoalesce(_chunkX5P6QQOBcjs.getProviderConfig.call(void 0, config, provider), () => ( void 0));
|
|
230
|
+
}
|
|
231
|
+
function resolveActiveProvider(ctx) {
|
|
232
|
+
return _nullishCoalesce(_nullishCoalesce(_optionalChain([ctx, 'access', _4 => _4.config, 'optionalAccess', _5 => _5.provider]), () => ( ctx.provider)), () => ( "openrouter"));
|
|
233
|
+
}
|
|
234
|
+
function resolveActiveModel(ctx, provider) {
|
|
235
|
+
const settings = resolveProviderSettings(ctx.config, provider);
|
|
236
|
+
return _nullishCoalesce(_optionalChain([settings, 'optionalAccess', _6 => _6.model]), () => ( ctx.model));
|
|
237
|
+
}
|
|
238
|
+
function resolveReasoningEffort(config, provider) {
|
|
239
|
+
return _optionalChain([resolveProviderSettings, 'call', _7 => _7(config, provider), 'optionalAccess', _8 => _8.reasoningEffort]);
|
|
240
|
+
}
|
|
241
|
+
function resolveContextWindow(ctx, provider, model) {
|
|
242
|
+
const settings = resolveProviderSettings(ctx.config, provider);
|
|
243
|
+
return _nullishCoalesce(_nullishCoalesce(_optionalChain([ctx, 'access', _9 => _9.getContextWindow, 'optionalCall', _10 => _10()]), () => ( _optionalChain([settings, 'optionalAccess', _11 => _11.contextWindow]))), () => ( getContextWindow(model, _optionalChain([settings, 'optionalAccess', _12 => _12.contextWindow]))));
|
|
244
|
+
}
|
|
245
|
+
function resolveContextTokensUsed(ctx, contextWindow, percentLeft) {
|
|
246
|
+
const reported = _optionalChain([ctx, 'access', _13 => _13.getTotalTokensUsed, 'optionalCall', _14 => _14()]);
|
|
247
|
+
if (typeof reported === "number" && Number.isFinite(reported) && reported > 0) {
|
|
248
|
+
return Math.round(reported);
|
|
249
|
+
}
|
|
250
|
+
return Math.round(contextWindow * ((100 - percentLeft) / 100));
|
|
251
|
+
}
|
|
252
|
+
function resolveAgentsFile(workspaceRoot) {
|
|
253
|
+
return _fs2.default.existsSync(_path2.default.join(workspaceRoot, "AGENTS.md")) ? "AGENTS.md" : "none";
|
|
254
|
+
}
|
|
255
|
+
function resolveAccount(config) {
|
|
256
|
+
const account = _chunkNVATU4V6cjs.formatAccount.call(void 0, config, "");
|
|
257
|
+
if (account) {
|
|
258
|
+
return account;
|
|
259
|
+
}
|
|
260
|
+
if (_optionalChain([config, 'optionalAccess', _15 => _15.openai, 'optionalAccess', _16 => _16.authMode]) === "chatgpt" && _optionalChain([config, 'access', _17 => _17.openai, 'access', _18 => _18.chatgptAuth, 'optionalAccess', _19 => _19.accountId])) {
|
|
261
|
+
return `ChatGPT account ${config.openai.chatgptAuth.accountId}`;
|
|
262
|
+
}
|
|
263
|
+
return "not signed in";
|
|
264
|
+
}
|
|
265
|
+
function isUsageV2Enabled(ctx) {
|
|
266
|
+
const localDefault = ctx.config ? _nullishCoalesce(_optionalChain([_chunkHK5A54AVcjs.getFeatureState.call(void 0, ctx.config, USAGE_V2_FLAG), 'optionalAccess', _20 => _20.enabled]), () => ( false)) : false;
|
|
267
|
+
return _nullishCoalesce(_optionalChain([ctx, 'access', _21 => _21.isFeatureEnabled, 'optionalCall', _22 => _22(USAGE_V2_FLAG, localDefault)]), () => ( localDefault));
|
|
268
|
+
}
|
|
269
|
+
function gatherUsageDashboardData(ctx) {
|
|
270
|
+
const provider = resolveActiveProvider(ctx);
|
|
271
|
+
const model = resolveActiveModel(ctx, provider);
|
|
272
|
+
const contextPercentLeft = clampPercent(_nullishCoalesce(_optionalChain([ctx, 'access', _23 => _23.getContextPercentLeft, 'optionalCall', _24 => _24()]), () => ( 100)));
|
|
273
|
+
const contextWindow = resolveContextWindow(ctx, provider, model);
|
|
274
|
+
const currentSession = ctx.sessionManager.getCurrentSession();
|
|
275
|
+
const usageLimits = _nullishCoalesce(_optionalChain([ctx, 'access', _25 => _25.getUsageLimits, 'optionalCall', _26 => _26()]), () => ( []));
|
|
276
|
+
return {
|
|
277
|
+
model,
|
|
278
|
+
provider,
|
|
279
|
+
directory: formatPath(ctx.workspaceRoot),
|
|
280
|
+
permissions: formatPermissionMode(_optionalChain([ctx, 'access', _27 => _27.config, 'optionalAccess', _28 => _28.permissions, 'optionalAccess', _29 => _29.mode])),
|
|
281
|
+
agentsFile: resolveAgentsFile(ctx.workspaceRoot),
|
|
282
|
+
account: resolveAccount(ctx.config),
|
|
283
|
+
sessionId: _nullishCoalesce(_optionalChain([currentSession, 'optionalAccess', _30 => _30.metadata, 'access', _31 => _31.sessionId]), () => ( "none")),
|
|
284
|
+
contextPercentLeft,
|
|
285
|
+
contextWindow,
|
|
286
|
+
contextTokensUsed: resolveContextTokensUsed(ctx, contextWindow, contextPercentLeft),
|
|
287
|
+
tokenUsageStatus: _nullishCoalesce(_optionalChain([ctx, 'access', _32 => _32.getTokenUsageStatus, 'optionalCall', _33 => _33()]), () => ( "actual")),
|
|
288
|
+
reasoningEffort: resolveReasoningEffort(ctx.config, provider),
|
|
289
|
+
usageLimits
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
function formatProgressBar(percentLeft, width = 24) {
|
|
293
|
+
const emptySlots = Math.round(percentLeft / 100 * width);
|
|
294
|
+
const usedSlots = width - emptySlots;
|
|
295
|
+
return `[${"\u2588".repeat(emptySlots)}${"\u2591".repeat(usedSlots)}]`;
|
|
296
|
+
}
|
|
297
|
+
function formatInfoRow(label, value, labelWidth) {
|
|
298
|
+
const theme = _chunkLJD7KR3Lcjs.createCommandTheme.call(void 0, );
|
|
299
|
+
return `${theme.muted(label.padEnd(labelWidth))} ${value}`;
|
|
300
|
+
}
|
|
301
|
+
function formatModel(data) {
|
|
302
|
+
if (!data.reasoningEffort) {
|
|
303
|
+
return data.model;
|
|
304
|
+
}
|
|
305
|
+
return `${data.model} ${_chunkLJD7KR3Lcjs.createCommandTheme.call(void 0, ).muted(`(reasoning ${data.reasoningEffort})`)}`;
|
|
306
|
+
}
|
|
307
|
+
function formatContextSummary(data) {
|
|
308
|
+
const used = formatCompactNumber(data.contextTokensUsed);
|
|
309
|
+
const window = formatCompactNumber(data.contextWindow);
|
|
310
|
+
const suffix = data.tokenUsageStatus === "unavailable" ? " estimated" : "";
|
|
311
|
+
return `${data.contextPercentLeft}% left ${_chunkLJD7KR3Lcjs.createCommandTheme.call(void 0, ).muted(`(${used} used / ${window}${suffix})`)}`;
|
|
312
|
+
}
|
|
313
|
+
function formatUsageLimitRow(row, labelWidth) {
|
|
314
|
+
if (row.unavailableReason) {
|
|
315
|
+
return formatInfoRow(`${row.label}:`, row.unavailableReason, labelWidth);
|
|
316
|
+
}
|
|
317
|
+
const percent = clampPercent(_nullishCoalesce(row.percentLeft, () => ( 100)));
|
|
318
|
+
const reset = row.resetLabel ? _chunkLJD7KR3Lcjs.createCommandTheme.call(void 0, ).muted(` (${row.resetLabel})`) : "";
|
|
319
|
+
const usage2 = typeof row.used === "number" && typeof row.limit === "number" ? _chunkLJD7KR3Lcjs.createCommandTheme.call(void 0, ).muted(` (${formatCompactNumber(row.used)} used / ${formatCompactNumber(row.limit)})`) : "";
|
|
320
|
+
return formatInfoRow(`${row.label}:`, `${formatProgressBar(percent)} ${percent}% left${reset}${usage2}`, labelWidth);
|
|
321
|
+
}
|
|
322
|
+
function formatUsageDashboard(data) {
|
|
323
|
+
const labelWidth = 24;
|
|
324
|
+
const providerLimitRows = data.usageLimits.length > 0 ? data.usageLimits : [{ label: String(data.provider), unavailableReason: "not reported by provider" }];
|
|
325
|
+
const lines = [
|
|
326
|
+
formatInfoRow("Model:", formatModel(data), labelWidth),
|
|
327
|
+
formatInfoRow("Provider:", String(data.provider), labelWidth),
|
|
328
|
+
formatInfoRow("Directory:", data.directory, labelWidth),
|
|
329
|
+
formatInfoRow("Permissions:", data.permissions, labelWidth),
|
|
330
|
+
formatInfoRow("Agents.md:", data.agentsFile, labelWidth),
|
|
331
|
+
formatInfoRow("Account:", data.account, labelWidth),
|
|
332
|
+
formatInfoRow("Session:", data.sessionId, labelWidth),
|
|
333
|
+
"",
|
|
334
|
+
formatInfoRow("Context window:", formatContextSummary(data), labelWidth),
|
|
335
|
+
formatInfoRow("", formatProgressBar(data.contextPercentLeft), labelWidth),
|
|
336
|
+
"",
|
|
337
|
+
formatInfoRow("Provider limits:", "", labelWidth).trimEnd(),
|
|
338
|
+
...providerLimitRows.map((row) => formatUsageLimitRow(row, labelWidth))
|
|
339
|
+
];
|
|
340
|
+
return lines.join("\n");
|
|
341
|
+
}
|
|
342
|
+
async function usage(ctx) {
|
|
343
|
+
if (!isUsageV2Enabled(ctx)) {
|
|
344
|
+
return "The /usage dashboard is behind usage_v2. Run /features enable usage_v2, then /usage again. No restart required.";
|
|
345
|
+
}
|
|
346
|
+
await _optionalChain([ctx, 'access', _34 => _34.trackFeatureActivation, 'optionalCall', _35 => _35(USAGE_V2_FLAG, {
|
|
347
|
+
provider: ctx.provider,
|
|
348
|
+
model: ctx.model
|
|
349
|
+
})]);
|
|
350
|
+
return formatUsageDashboard(gatherUsageDashboardData(ctx));
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
exports.CONTEXT_ENV_VARS = CONTEXT_ENV_VARS; exports.getContextWindow = getContextWindow; exports.estimateMessageTokens = estimateMessageTokens; exports.estimateMessagesTokens = estimateMessagesTokens; exports.calculateContextUsage = calculateContextUsage; exports.USAGE_V2_FLAG = USAGE_V2_FLAG; exports.metadata = metadata; exports.gatherUsageDashboardData = gatherUsageDashboardData; exports.formatUsageDashboard = formatUsageDashboard; exports.usage = usage;
|
|
365
|
+
/**
|
|
366
|
+
* @license
|
|
367
|
+
* Copyright 2025 Autohand AI LLC
|
|
368
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
369
|
+
*
|
|
370
|
+
* Domain types for the context-compaction module.
|
|
371
|
+
*/
|
|
372
|
+
/**
|
|
373
|
+
* @license
|
|
374
|
+
* Copyright 2025 Autohand AI LLC
|
|
375
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
376
|
+
*
|
|
377
|
+
* Token estimation, context window lookup, and usage calculation.
|
|
378
|
+
* Moved from src/utils/context.ts — this is the canonical location.
|
|
379
|
+
* The old barrel re-exports for backward compatibility.
|
|
380
|
+
*/
|
|
381
|
+
/**
|
|
382
|
+
* @license
|
|
383
|
+
* Copyright 2026 Autohand AI LLC
|
|
384
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
385
|
+
*/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AUTOHAND_HOME
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-SHRLFX6F.js";
|
|
4
4
|
|
|
5
5
|
// src/skills/CommunitySkillsCache.ts
|
|
6
6
|
import fs from "fs-extra";
|
|
@@ -8,6 +8,9 @@ import path from "path";
|
|
|
8
8
|
var DEFAULT_TTL_MS = 24 * 60 * 60 * 1e3;
|
|
9
9
|
var DEFAULT_MAX_SKILLS_CACHE = 50;
|
|
10
10
|
var CommunitySkillsCache = class {
|
|
11
|
+
cacheDir;
|
|
12
|
+
ttlMs;
|
|
13
|
+
maxSkillsCache;
|
|
11
14
|
constructor(config = {}) {
|
|
12
15
|
this.cacheDir = config.cacheDir || path.join(AUTOHAND_HOME, "community-skills", "cache");
|
|
13
16
|
this.ttlMs = config.ttlMs ?? DEFAULT_TTL_MS;
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import {
|
|
2
|
+
GoalManager
|
|
3
|
+
} from "./chunk-SZD45IDG.js";
|
|
4
|
+
import {
|
|
5
|
+
GOAL_FEATURE_DISABLED_MESSAGE,
|
|
6
|
+
resolveGoalFeatureEnabled
|
|
7
|
+
} from "./chunk-7MY4JHER.js";
|
|
8
|
+
|
|
9
|
+
// src/commands/goal.ts
|
|
10
|
+
import chalk from "chalk";
|
|
11
|
+
var metadata = {
|
|
12
|
+
command: "/goal",
|
|
13
|
+
description: "Create, inspect, pause, resume, complete, clear, and queue persistent goals",
|
|
14
|
+
implemented: true,
|
|
15
|
+
subcommands: [
|
|
16
|
+
{ name: "queue", description: "List queued goals or enqueue a goal" },
|
|
17
|
+
{ name: "pause", description: "Pause the current goal" },
|
|
18
|
+
{ name: "resume", description: "Resume a paused or queued goal" },
|
|
19
|
+
{ name: "complete", description: "Mark the current goal complete" },
|
|
20
|
+
{ name: "clear", description: "Clear the current goal" },
|
|
21
|
+
{ name: "templates", description: "List reusable .pi-goals templates" }
|
|
22
|
+
]
|
|
23
|
+
};
|
|
24
|
+
async function goal(ctx, args = []) {
|
|
25
|
+
if (!resolveGoalFeatureEnabled(ctx.config, ctx.isFeatureEnabled)) {
|
|
26
|
+
return GOAL_FEATURE_DISABLED_MESSAGE;
|
|
27
|
+
}
|
|
28
|
+
await ctx.trackFeatureActivation?.("slash_goal", { surface: "slash_command" });
|
|
29
|
+
const manager = new GoalManager(ctx.workspaceRoot);
|
|
30
|
+
const input = args.join(" ").trim();
|
|
31
|
+
if (!input) {
|
|
32
|
+
return formatSnapshot(await manager.getSnapshot());
|
|
33
|
+
}
|
|
34
|
+
const [subcommand, ...restArgs] = args;
|
|
35
|
+
const rest = restArgs.join(" ").trim();
|
|
36
|
+
switch (subcommand?.toLowerCase()) {
|
|
37
|
+
case "queue":
|
|
38
|
+
return handleQueue(manager, rest);
|
|
39
|
+
case "pause":
|
|
40
|
+
return formatMutation(await manager.updateGoal({ status: "paused" }));
|
|
41
|
+
case "resume": {
|
|
42
|
+
const snapshot = await manager.getSnapshot();
|
|
43
|
+
if (!snapshot.goal && snapshot.queue.length > 0) {
|
|
44
|
+
const started = await manager.startQueuedGoal();
|
|
45
|
+
if (started.ok && started.goal) {
|
|
46
|
+
queueGoalContinuation(ctx, started.goal.objective);
|
|
47
|
+
}
|
|
48
|
+
return formatMutation(started);
|
|
49
|
+
}
|
|
50
|
+
const resumed = await manager.updateGoal({ status: "active" });
|
|
51
|
+
if (resumed.ok && resumed.goal) {
|
|
52
|
+
queueGoalContinuation(ctx, resumed.goal.objective);
|
|
53
|
+
}
|
|
54
|
+
return formatMutation(resumed);
|
|
55
|
+
}
|
|
56
|
+
case "complete":
|
|
57
|
+
return formatMutation(await manager.updateGoal({ status: "complete" }));
|
|
58
|
+
case "clear":
|
|
59
|
+
return formatMutation(await manager.clearGoal());
|
|
60
|
+
case "templates": {
|
|
61
|
+
const templates = await manager.listTemplates();
|
|
62
|
+
if (templates.length === 0) return "No goal templates found in .pi-goals/ or .ai/.pi-goals/.";
|
|
63
|
+
return [
|
|
64
|
+
`Goal templates (${templates.length}):`,
|
|
65
|
+
...templates.map((template) => {
|
|
66
|
+
const aliases = template.aliases.length ? ` aliases: ${template.aliases.join(", ")}` : "";
|
|
67
|
+
return `- ${template.name}${aliases}${template.description ? ` - ${template.description}` : ""}`;
|
|
68
|
+
})
|
|
69
|
+
].join("\n");
|
|
70
|
+
}
|
|
71
|
+
default: {
|
|
72
|
+
const resolved = await manager.resolveObjective(input);
|
|
73
|
+
if (!resolved.ok) return chalk.yellow(resolved.message);
|
|
74
|
+
const created = await manager.createGoal(resolved.input, { replace: false });
|
|
75
|
+
if (created.ok && created.goal) {
|
|
76
|
+
queueGoalContinuation(ctx, created.goal.objective);
|
|
77
|
+
}
|
|
78
|
+
return formatMutation(created);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async function runGoalCli(workspaceRoot, rawInput, config) {
|
|
83
|
+
if (!resolveGoalFeatureEnabled(config)) {
|
|
84
|
+
return GOAL_FEATURE_DISABLED_MESSAGE;
|
|
85
|
+
}
|
|
86
|
+
const manager = new GoalManager(workspaceRoot);
|
|
87
|
+
const input = rawInput?.trim() ?? "";
|
|
88
|
+
if (!input) return formatSnapshot(await manager.getSnapshot());
|
|
89
|
+
const args = input.match(/"[^"]*"|'[^']*'|\S+/g)?.map(unquote) ?? [];
|
|
90
|
+
return goal({ workspaceRoot }, args);
|
|
91
|
+
}
|
|
92
|
+
async function handleQueue(manager, rest) {
|
|
93
|
+
if (!rest) {
|
|
94
|
+
const snapshot = await manager.getSnapshot();
|
|
95
|
+
if (snapshot.queue.length === 0) return "No queued goals.";
|
|
96
|
+
return formatQueue(snapshot);
|
|
97
|
+
}
|
|
98
|
+
return formatMutation(await manager.enqueueGoalBlock(rest, "command"));
|
|
99
|
+
}
|
|
100
|
+
function queueGoalContinuation(ctx, objective) {
|
|
101
|
+
ctx.queueInstruction?.([
|
|
102
|
+
`Active goal: ${objective}`,
|
|
103
|
+
"Continue working toward this persistent goal until it is complete, blocked, paused, cleared, or budget-limited.",
|
|
104
|
+
"Use get_goal or update_goal when you need to inspect or modify the goal state."
|
|
105
|
+
].join("\n"));
|
|
106
|
+
}
|
|
107
|
+
function formatMutation(result) {
|
|
108
|
+
const lines = [result.ok ? chalk.green(result.message ?? "Goal updated.") : chalk.yellow(result.message ?? "Goal command failed.")];
|
|
109
|
+
if (result.goal) {
|
|
110
|
+
lines.push("");
|
|
111
|
+
lines.push(formatGoal(result.goal));
|
|
112
|
+
}
|
|
113
|
+
if (result.queued?.length) {
|
|
114
|
+
lines.push("");
|
|
115
|
+
lines.push(`Queued ${result.queued.length} goal${result.queued.length === 1 ? "" : "s"}:`);
|
|
116
|
+
for (const item of result.queued) {
|
|
117
|
+
lines.push(`- [${item.queueId}] ${item.objective}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (result.started) {
|
|
121
|
+
lines.push(`Started queue item: ${result.started.queueId}`);
|
|
122
|
+
}
|
|
123
|
+
if (result.queue.length > 0 && !result.queued?.length) {
|
|
124
|
+
lines.push("");
|
|
125
|
+
lines.push(formatQueue({ queue: result.queue }));
|
|
126
|
+
}
|
|
127
|
+
return lines.join("\n");
|
|
128
|
+
}
|
|
129
|
+
function formatSnapshot(snapshot) {
|
|
130
|
+
if (!snapshot.goal && snapshot.queue.length === 0) {
|
|
131
|
+
return [
|
|
132
|
+
"No goal is currently set.",
|
|
133
|
+
"Use /goal <objective> to create one, or /goal queue <objective> to queue later work."
|
|
134
|
+
].join("\n");
|
|
135
|
+
}
|
|
136
|
+
const parts = [];
|
|
137
|
+
if (snapshot.goal) parts.push(formatGoal(snapshot.goal));
|
|
138
|
+
else parts.push("No active goal.");
|
|
139
|
+
if (snapshot.queue.length > 0) {
|
|
140
|
+
parts.push("");
|
|
141
|
+
parts.push(formatQueue(snapshot));
|
|
142
|
+
}
|
|
143
|
+
return parts.join("\n");
|
|
144
|
+
}
|
|
145
|
+
function formatGoal(goalState) {
|
|
146
|
+
const lines = [
|
|
147
|
+
`Goal: ${goalState.objective}`,
|
|
148
|
+
`Status: ${goalState.status}`,
|
|
149
|
+
`ID: ${goalState.goalId}`,
|
|
150
|
+
`Elapsed: ${formatDuration(goalState.timeUsedSeconds)}`,
|
|
151
|
+
`Tokens: ${goalState.tokensUsed}${goalState.tokenBudget ? ` / ${goalState.tokenBudget}` : ""}`
|
|
152
|
+
];
|
|
153
|
+
if (goalState.timeBudgetSeconds) lines.push(`Time budget: ${formatDuration(goalState.timeBudgetSeconds)}`);
|
|
154
|
+
if (goalState.minTokensBeforeWrapUp) lines.push(`Token floor: ${goalState.minTokensBeforeWrapUp}`);
|
|
155
|
+
if (goalState.minTimeSecondsBeforeWrapUp) lines.push(`Time floor: ${formatDuration(goalState.minTimeSecondsBeforeWrapUp)}`);
|
|
156
|
+
return lines.join("\n");
|
|
157
|
+
}
|
|
158
|
+
function formatQueue(snapshot) {
|
|
159
|
+
if (snapshot.queue.length === 0) return "No queued goals.";
|
|
160
|
+
return [
|
|
161
|
+
`Queued goals (${snapshot.queue.length}):`,
|
|
162
|
+
...snapshot.queue.map((item, index) => `${index + 1}. [${item.queueId}] ${item.objective}`)
|
|
163
|
+
].join("\n");
|
|
164
|
+
}
|
|
165
|
+
function formatDuration(seconds) {
|
|
166
|
+
const whole = Math.max(0, Math.floor(seconds));
|
|
167
|
+
const minutes = Math.floor(whole / 60);
|
|
168
|
+
const secs = whole % 60;
|
|
169
|
+
return minutes > 0 ? `${minutes}m ${secs}s` : `${secs}s`;
|
|
170
|
+
}
|
|
171
|
+
function unquote(value) {
|
|
172
|
+
return value.replace(/^['"]|['"]$/g, "");
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export {
|
|
176
|
+
metadata,
|
|
177
|
+
goal,
|
|
178
|
+
runGoalCli
|
|
179
|
+
};
|
|
180
|
+
/**
|
|
181
|
+
* @license
|
|
182
|
+
* Copyright 2025 Autohand AI LLC
|
|
183
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
184
|
+
*/
|